Subversion Repositories Applications.annuaire

Compare Revisions

Ignore whitespace Rev 6 → Rev 7

/trunk/controleurs/AnnuaireControleur.php
13,6 → 13,7
 
class AnnuaireControleur extends Controleur {
 
 
/**
* (fonction héritée de la classe Controleur)
* Avant chaque chargement de vue, on ajoute l'url de la page dans
31,9 → 32,9
*/
public function index() {
$data = array();
$this->chargerVue('index_annuaire', $data);
$index_annuaire = $this->getVue('index_annuaire', $data);
 
return $this->index_annuaire;
return $index_annuaire;
}
 
/**-------- Fonctions de gestion des annuaires --------------------------------*/
46,9 → 47,9
$this->chargerModele('AnnuaireModele');
$data['erreurs'] = null;
$data['annuaires'] = $this->AnnuaireModele->chargerListeAnnuaire();
$this->chargerVue('liste_annu', $data);
$liste_annu = $this->getVue(config::get('chemin_squelettes_annuaires').'liste_annu', $data);
 
return $this->liste_annu;
return $liste_annu;
}
 
/**
62,9 → 63,9
$data['erreurs'] = array();
$data['annuaire'] = $this->AnnuaireModele->chargerAnnuaire($id, true);
$data['metadonnees'] = $this->MetadonneeModele->chargerListeMetadonneeAnnuaire($id);
$this->chargerVue('annuaire', $data);
$annuaire = $this->getVue(config::get('chemin_squelettes_annuaires').'annuaire', $data);
 
return $this->annuaire;
return $annuaire;
}
 
/**
72,15 → 73,17
* @param $id int l'identifiant de l'annuaire
* @return string la vue contenant les inscrits à l'annuaire
*/
public function chargerAnnuaireListeInscrits($id) {
public function chargerAnnuaireListeInscrits($id, $numero_page = 1, $taille_page = 50) {
 
$this->chargerModele('AnnuaireModele');
$data['erreurs'] = array();
$champs = $this->obtenirChampsMappageAnnuaire($id);
$data['annuaire'] = $this->AnnuaireModele->chargerAnnuaireListeInscrits($id, $champs[0], 1);
$this->chargerVue('annuaire_inscrits', $data);
$data['champs'] = $this->obtenirChampsMappageAnnuaire($id);
$data['annuaire'] = $this->AnnuaireModele->chargerAnnuaireListeInscrits($id, $data['champs'][0], $numero_page, $taille_page);
$data['pagination'] = array('numero_page' => $numero_page, 'taille_page' => $taille_page);
 
return $this->annuaire_inscrits;
$annuaires_inscrits = $this->getVue(config::get('chemin_squelettes_annuaires').'annuaire_inscrits', $data);
 
return $annuaires_inscrits;
}
 
/**-------- Fonctions d'affichage du formulaire de saisie d'un champ de metadonnée suivant le type de champ---------*/
111,11 → 114,14
 
// le nom du formulaire d'inscription est le même que le code de l'annuaire
// TODO: réfléchir à une meilleure manière de stocker ça
$this->ChargerVue($annuaire['informations']['aa_code'].'_inscription',$donnees);
// Générer un fichier s'il n'existe pas ? et ensuite le lire ?
if(!$this->formulaireExiste($annuaire['informations']['aa_code'])) {
$formulaire_inscription = $this->genererFormulaireInscription($donnees);
} else {
$formulaire_inscription = $this->GetVue(config::get('chemin_squelettes_formulaires').$annuaire['informations']['aa_code'].'_inscription',$donnees);
}
 
$formulaire_inscription = $annuaire['informations']['aa_code'].'_inscription';
 
return $this->$formulaire_inscription;
return $formulaire_inscription;
}
 
/**
133,13 → 139,13
$donnees['amc_id_champ'] = $id_champ;
$this->chargerModele('MetadonneeModele');
$nom__type_champ = $this->MetadonneeModele->renvoyerCorrespondanceNomTemplateChamp($donnees['amc_ce_type_affichage']);
return $this->getVue($nom__type_champ,$donnees);
return $this->getVue(config::get('chemin_squelettes_champs').$nom__type_champ,$donnees);
}
 
/**-------- Fonctions d'inscription -------------------------------------------------------------------------------*/
 
/**
* Lors d'une tentative d'inscription, ajoute une les infos dans la tables d'inscription
* Lors d'une tentative d'inscription, ajoute les infos dans la table d'inscription
* temporaire et envoie le mail contenant le lien de confirmation si tout s'est bien passé
* @param Array $valeurs les valeurs à ajouter
* @return string la vue contenant la confirmation de l'inscription
148,6 → 154,7
 
$this->chargerModele('MetadonneeModele');
$id_annuaire = $valeurs['aa_id_annuaire'];
unset($valeurs['aa_id_annuaire']);
 
$tableau_mappage = $this->obtenirChampsMappageAnnuaire($id_annuaire);
$valeurs_mappees = array();
154,11 → 161,27
 
// on itère sur le tableau de valeur pour récupérer les champs de mappage;
foreach($valeurs as $nom_champ => $valeur) {
 
 
// pour chaque valeur
// on extrait l'id du champ
$ids_champ = mb_split("_",$nom_champ);
$id_champ = $ids_champ[count($ids_champ) - 1];
$ids_champ = mb_split("_",$nom_champ, 3);
 
if(count($ids_champ) == 3) {
 
$type = $ids_champ[0];
$id_champ = $ids_champ[2];
$confirmation = $valeurs[$type.'_'.$id_champ];
 
} else {
$type = $ids_champ[0];
$confirmation = false;
$id_champ = $ids_champ[1];
}
 
// on fait des vérifications et des remplacements sur certaines valeurs
$valeurs[$nom_champ] = $this->verifierEtRemplacerValeurChamp($type,$valeur,$confirmation);
 
// Si le champ fait partie des champs mappés
$cle_champ = array_search($id_champ, $tableau_mappage[1]);
 
165,18 → 188,18
if($cle_champ) {
// on ajoute sa clé correspondante dans le tableau des champs mappés
// qui sont les champs à vérifier
$valeurs_mappees[$ids_champ] = $valeur;
$valeurs_mappees[$cle_champ] = $valeur;
}
}
 
// vérification des champs minimaux : nom, prénom, mail, mot de passe
// TODO: des champs minimaux différents pour chaque annuaire ? comment les stocke t'on ?
/*if($erreurs = $this->verifierErreursChamps($id_annuaire,$valeurs_mappees, $tableau_mappage)) {
if($erreurs = $this->verifierErreursChamps($id_annuaire,$valeurs_mappees, $tableau_mappage)) {
$valeurs['erreurs'] = $erreurs;
return $this->afficherFormulaireInscription($id_annuaire, $valeurs);
}*/
}
 
$code_confirmation = $this->InsererDansTableTemporaireEtcreerCodeConfirmationInscription($valeurs);
$code_confirmation = $this->InsererDansTableTemporaireEtCreerCodeConfirmationInscription($valeurs);
 
$this->envoyerMailConfirmationInscription($valeurs_mappees['champ_mail'],
$valeurs_mappees['champ_nom'],
183,7 → 206,7
$valeurs_mappees['champ_prenom'],
$code_confirmation);
// Si tout s'est bien passé, on affiche la page de confirmation
return $this->getVue('annuaire_inscription_reussie',array());
return $this->getVue(config::get('chemin_squelettes_annuaires').'annuaire_inscription_reussie',array());
}
 
/**
205,8 → 228,7
unset($valeurs['aa_id_annuaire']);
 
$this->chargerModele('MetadonneeModele');
// TODO: faire un tri par l'id ou selon autre critère pour séparer champs
// normaux des meta champs
 
$tableau_mappage = $this->obtenirChampsMappageAnnuaire($id_annuaire);
 
$valeurs_mappees = array();
298,15 → 320,14
unset($tableau_valeurs[$nom_champ]);
}
 
//print_r($tableau_valeurs);
 
$this->chargerModele('MetadonneeModele');
$champs_metadonnees= $this->MetadonneeModele->chargerListeValeursMetadonneesUtilisateur($id_annuaire, $id_utilisateur);
 
$donnees['champs'] = array_merge($tableau_valeurs, $champs_metadonnees);
$this->chargerVue('annuaire_tela_inscrits_fiche',$donnees);
 
return $this->annuaire_tela_inscrits_fiche;
$annuaire_inscrits = $this->getVue(config::get('chemin_squelettes_fiches').'annuaire_tela_inscrits_fiche',$donnees);
 
return $annuaire_inscrits;
}
 
/**
326,10 → 347,17
$base_url->setVariableRequete('id',$code_confirmation_inscription);
 
$donnees = array('nom' => $nom, 'prenom' => $prenom, 'lien_confirmation_inscription' => $base_url->getURL());
$contenu_mail = $this->getVue('mail_confirmation_inscription',$donnees);
$contenu_mail = $this->getVue(config::get('chemin_squelettes_mails').'mail_confirmation_inscription',$donnees);
 
return mail($adresse_mail,'Inscription au site Tela Botanica',$contenu_mail);
// Pour envoyer un mail HTML, l'en-tête Content-type doit être défini
$entetes = 'MIME-Version: 1.0' . "\r\n";
$entetes .= 'Content-type: text/html; charset='.Config::get('appli_encodage'). "\r\n";
// En-têtes additionnels
$entetes .= 'To: '.$adresse_mail."\r\n";
$entetes .= 'From: '.Config::get('adresse_mail_annuaire')."\r\n";
 
return mail($adresse_mail,'Inscription au site Tela Botanica',$contenu_mail, $entetes);
 
}
 
/**
336,7 → 364,7
* Insère les données dans la table d'inscription temporaire et crée un code de confirmation (à insérer dans le mail)
* @param Array $valeurs les valeurs à insérer
*/
private function InsererDansTableTemporaireEtcreerCodeConfirmationInscription($valeurs) {
private function InsererDansTableTemporaireEtCreerCodeConfirmationInscription($valeurs) {
// Le code de confirmation est constitué des 8 premiers caractères de l'identifiant de session
$code_confirmation = substr(session_id(), 0, 8) ;
 
389,35 → 417,63
 
$erreurs = false;
 
$champ_mail = '16';
$champ_prenom = '7';
$champ_nom = '1';
$champ_pass = '11';
 
if(!$this->mailValide($valeurs[$tableau_mappage[0]['champ_mail']])) {
if(!$this->mailValide($valeurs['champ_mail'])) {
$erreurs['text_'.$tableau_mappage[1]['champ_mail']] = 'mail invalide';
}
 
if(trim($valeurs['pass_'.$tableau_mappage[0]['champ_mail']]) != ''
|| trim($valeurs['pass_conf'.$tableau_mappage[1]['champ_mail']]) != '') {
 
if($valeurs['pass_'.$champ_pass] =! $valeurs['pass_conf_'.$champ_pass]) {
$erreurs['pass_'.$tableau_mappage[1]['champ_mail']] = 'mot de passe invalide';
}
 
if(trim($valeurs['pass']) == ''
|| $valeurs['pass_conf'] != $valeurs['pass']) {
$erreurs['pass_'.$tableau_mappage[1]['champ_pass']] = 'mot de passe invalide';
}
 
if(trim($valeurs['text_'.$tableau_mappage[0]['champ_mail']]) == '') {
$erreurs['text_'.$tableau_mappage[1]['champ_mail']] = 'le nom est obligatoire';
if(trim($valeurs['champ_nom']) == '') {
$erreurs['text_'.$tableau_mappage[1]['champ_prenom']] = 'le nom est obligatoire';
}
 
if(trim($valeurs['text_'.$tableau_mappage[0]['champ_mail']]) == '') {
$erreurs['text_'.$tableau_mappage[1]['champ_mail']] = 'le prénom est obligatoire';
if(trim($valeurs['champ_prenom']) == '') {
$erreurs['text_'.$tableau_mappage[1]['champ_nom']] = 'le prénom est obligatoire';
}
 
return $erreurs;
}
 
private function verifierEtRemplacerValeurChamp($type, $valeur) {
 
$valeur_modifiee = $valeur;
 
switch($type) {
 
// cas du champ texte, à priori, rien de particulier
case 'text':
$valeur_modifiee = $valeur;
break;
 
// cas du champ password : on le crypte
case 'password':
$valeur_modifiee = $this->encrypterMotDePasse($valeur);
break;
 
// cas du champ checkbox
case 'checkbox':
// Si c'est un groupe checkbox, alors c'est une liste de checkbox liée à une ontologie
if(is_array($valeur)) {
// on stocke les valeurs d'ontologies liées au cases cochées
$valeur_modifiee = implode(Config::get('separateur_metadonnee'), array_keys($valeur));
} else {
// sinon on stocke 1 pour indique que la case est cochée (cas de la checkbox oui/non)
$valeur_modifiee = 1;
}
break;
 
default:
$valeur_modifiee = $valeur;
break;
}
 
return $valeur_modifiee;
}
 
/**
* Renvoie vrai ou faux suivant qu'un mail donné en paramètre est syntaxiquement valide (ne vérifie pas l'existence
* de l'adresse)
426,9 → 482,55
*/
private function mailValide($mail) {
 
$regexp_mail = '^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$';
return eregi($regexp_mail, $mail);
$regexp_mail = '/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/';
return preg_match($regexp_mail, $mail);
 
}
 
/**
* Renvoie un mot de passe crypté selon la fonction d'encryptage définie dans le fichier de configuration
* (si celle-ci n'existe pas on utilise une fonction par défaut)
* @param string $pass le mot de passe à encrypter
* @return string le mot de passe encrypté
*/
private function encrypterMotDePasse($pass) {
 
$fonction = Config::get('pass_crypt_fonct');
 
if(function_exists($fonction)) {
return $fonction($pass);
} else {
return md5($pass);
}
}
 
/**
* Renvoie le formulaire demandé s'il existe, sinon faux
* @param string $nom_formulaire le nom du formulaire demandé (qui est normalement le code d'un annuaire)
* @return boolean true si le formulaire existe, false sinon
*/
private function formulaireExiste($nom_formulaire) {
 
//echo Config::get('chemin_squelettes_formulaires').$nom_formulaire.'_inscription.tpl.html';
return file_exists(Config::get('chemin_squelettes').Config::get('chemin_squelettes_formulaires').$nom_formulaire.'_inscription.tpl.html');
}
 
/**
* Renvoie un formulaire d'inscription minimal auto-généré
* @param string $donnees les donnée à inclure dans le formulaire
* @return string la vue contenant le formulaire généré
*/
private function GenererFormulaireInscription($donnees) {
 
$formulaire_modele = $this->getVue(config::get('chemin_squelettes_formulaires').'inscription',$donnees);
 
if($formulaire_modele) {
return $formulaire_modele;
} else {
trigger_error("impossible de trouver le squelette de référence pour le formulaire");
}
 
return false;
}
}
?>