Subversion Repositories Applications.annuaire

Compare Revisions

Ignore whitespace Rev 37 → Rev 38

/trunk/modeles/AnnuaireModele.php
21,9 → 21,8
private $config = array();
 
/**
* Charge la liste complète des listes
* return array un tableau contenant des objets d'informations sur les listes
* @return array un tableau d'objets contenant la liste des listes
* Charge la liste complète des annuaires gérés par l'application
* @return array un tableau contenant des informations sur les annuaires gérés par l'application
*/
public function chargerListeAnnuaire() {
$requete = 'SELECT * '.
69,21 → 68,24
 
$tableau_mappage = array();
 
$tableau_mappage[0]['champ_id'] = 'U_ID';
$tableau_mappage[0]['champ_mail'] = 'U_MAIL';
$tableau_mappage[0]['champ_nom'] = 'U_NAME';
$tableau_mappage[0]['champ_prenom'] = 'U_SURNAME';
$tableau_mappage[0]['champ_pass'] = 'U_PASSWD';
$tableau_mappage[0]['champ_lettre'] = 'U_LETTRE';
$requete_champs_mappage = 'SELECT * FROM annu_triples WHERE at_ce_annuaire = '.$this->proteger($id_annuaire).' '.
"AND at_action IN ('champ_id', 'champ_mail', 'champ_nom', 'champ_prenom', 'champ_pass', 'champ_lettre', 'champ_code_postal', 'champ_ville')";
 
$resultat_champs_mappage = $this->requeteTous($requete_champs_mappage);
 
$tableau_mappage[1]['champ_mail'] = '16';
$tableau_mappage[1]['champ_nom'] = '1';
$tableau_mappage[1]['champ_prenom'] = '7';
$tableau_mappage[1]['champ_pass'] = '11';
$tableau_mappage[1]['champ_lettre'] = '14';
$tableau_mappage = array();
 
// TODO: voir comment stocker les correspondances de mappage
if(!$resultat_champs_mappage) {
trigger_error('impossible de récupérer les champs de mappage de l\'annuaire '.$id_annuaire);
}
 
foreach ($resultat_champs_mappage as $champ) {
$tableau_mappage[0][$champ['at_action']] = $champ['at_ressource'];
$tableau_mappage[1][$champ['at_action']] = $champ['at_valeur'];
}
 
// TODO faire une interface de gestion des champs de mappage
 
return $tableau_mappage ;
}
 
113,6 → 115,64
return $resultat_nombre_inscrits['nom_inscrits'] ;
}
 
public function chargerNombreAnnuaireListeInscritsParDepartement($identifiant) {
 
$requete_informations_annuaire = 'SELECT aa_bdd, aa_table '.
'FROM annu_annuaire '.
'WHERE aa_id_annuaire = '.$identifiant.' ';
$resultat_informations_annuaire = $this->requeteUn($requete_informations_annuaire);
 
if(!$resultat_informations_annuaire) {
trigger_error('impossible de récupérer les informations de la table '.$identifiant);
}
 
$tableau_mappage = $this->obtenirChampsMappageAnnuaire($identifiant);
$champ_code_postal = $tableau_mappage[0]['champ_code_postal'];
 
$requete_nombre_inscrits = 'SELECT IF ( SUBSTRING( '.$champ_code_postal.' FROM 1 FOR 2 ) >= 96, '.
' SUBSTRING( '.$champ_code_postal.' FROM 1 FOR 3 ), '.
' SUBSTRING( '.$champ_code_postal.' FROM 1 FOR 2 ) ) AS id, '.
' COUNT(*) AS nbre '.
'FROM '.$resultat_informations_annuaire['aa_bdd'].'.'.$resultat_informations_annuaire['aa_table'].' '.
'GROUP BY IF ( SUBSTRING( '.$champ_code_postal.' FROM 1 FOR 2 ) >= 96, '.
' SUBSTRING( '.$champ_code_postal.' FROM 1 FOR 3 ), '.
' SUBSTRING( '.$champ_code_postal.' FROM 1 FOR 2 ) ) '.
'ORDER BY id ASC ';
 
// Récupération des résultats
try {
$donnees = $this->requeteTous($requete_nombre_inscrits);
if ($donnees === false) {
$this->messages[] = "La requête n'a retourné aucun résultat.";
} else {
foreach ($donnees as $donnee) {
$resultat_nombre_inscrits[$donnee['id']] = $donnee['nbre'];
}
}
} catch (PDOException $e) {
$this->messages[] = sprintf($this->getTxt('sql_erreur'), $e->getFile(), $e->getLine(), $e->getMessage());
}
 
if(!$resultat_informations_annuaire) {
trigger_error('impossible de récupérer le nombre d\'inscrits de la table '.$resultat_informations_annuaire['aa_bdd'].'.'.$resultat_informations_annuaire['aa_table']);
}
 
return $resultat_nombre_inscrits;
}
 
public function rechercherInscritDansAnnuaireMappeParChamp($id_annuaire, $champ_critere, $valeur, $modele = false) {
 
$sep = '';
 
if($modele) {
$sep = '%';
}
 
$valeurs = array($champ_critere => $valeur.$sep);
 
return $this->rechercherInscritDansAnnuaireMappe($id_annuaire, $valeurs, array(), true);
}
 
/**
* Charge les inscrits d'une table annuaire mappée, en ne conservant que les champs de mappage indiqués
* @param int $identifiant l'identifiant de l'annuaire mappé
160,13 → 220,15
 
// on protège et on sérialise les données
$identifiant = $this->proteger($identifiant);
$donnees = serialize($donnees);
$donnees = base64_encode(serialize($donnees));
$donnees = $this->proteger($donnees);
 
//echo $donnees ;
 
// FIXME: les accents sautent alors que l'encodage est le bon ! Pourquoi ?
$requete = 'INSERT INTO annu_inscription_temp '.
'VALUES '.
'('.$identifiant.','.$donnees.', NOW()) ';
'('.$identifiant.','.$donnees.', NOW())';
 
return $this->requete($requete);
}
188,7 → 250,7
$donnees_inscription = $this->requeteUn($requete);
 
if($donnees_inscription) {
return unserialize($donnees_inscription['ait_donnees']);
return unserialize(base64_decode($donnees_inscription['ait_donnees']));
}
 
return false;
208,7 → 270,9
'WHERE '.
'ait_id = '.$identifiant;
 
return $this->requete($requete);
//return $this->requete($requete);
 
return true;
}
 
/**
220,8 → 284,6
*/
public function ajouterInscriptionDansAnnuaireMappe($id_annuaire, $valeurs_mappees, $nom_champs) {
 
$id_annuaire = 1;
 
$requete_infos_annuaire = 'SELECT * '.
'FROM annu_annuaire '.
'WHERE aa_id_annuaire = '.$id_annuaire.' ';
255,9 → 317,8
}
 
// le mail est censé être unique donc on l'utilise pour faire une selection pour retrouver l'enregistrement
// (je n'aime pas les requete du style SELECT MAX(id)... qui ne garantissent pas qu'on récupère le bon id
// (Les requetes du style SELECT MAX(id)... ne garantissent pas qu'on récupère le bon id
// si une autre insertion a eu lieu entre temps)
// TODO: voir si le standard sql propose quelque chose pour ce problème
$requete_nouvel_id = 'SELECT '.$nom_champs['champ_id'].' '.
'FROM '.$annuaire['aa_bdd'].'.'.$annuaire['aa_table'].' '.
'WHERE '.
318,6 → 379,8
public function obtenirMailParId($id_annuaire, $id_utilisateur) {
 
$champs_mappage = $this->obtenirChampsMappageAnnuaire($id_annuaire);
// on ne garde que les champs de mappage correspondant au champ de l'annuaire principal
$champs_mappage = $champs_mappage[0];
 
$requete_infos_annuaire = 'SELECT * '.
'FROM annu_annuaire '.
338,6 → 401,9
'FROM '.$resultat_infos_annuaire['aa_bdd'].'.'.$resultat_infos_annuaire['aa_table'].' '.
'WHERE '.$champs_mappage['champ_id'].' = '.$id_utilisateur;
 
 
 
//echo $requete_selection_utilisateur;
$resultat_selection_utilisateur = $this->requeteUn($requete_selection_utilisateur);
 
// en cas d'erreur on renvoie false
350,6 → 416,45
 
}
 
public function obtenirIdParMail($id_annuaire, $mail_utilisateur) {
 
$champs_mappage = $this->obtenirChampsMappageAnnuaire($id_annuaire);
// on ne garde que les champs de mappage correspondant au champ de l'annuaire principal
$champs_mappage = $champs_mappage[0];
 
$requete_infos_annuaire = 'SELECT * '.
'FROM annu_annuaire '.
'WHERE aa_id_annuaire = '.$id_annuaire.' ';
 
$resultat_infos_annuaire = $this->requeteUn($requete_infos_annuaire);
 
// en cas d'erreur on renvoie false
// TODO: lever une exception
if(!$resultat_infos_annuaire) {
return false;
}
 
$champs_mappage_str = implode(',',$champs_mappage);
$id_utilisateur = $this->proteger($id_utilisateur);
 
$requete_selection_utilisateur = 'SELECT '.$champs_mappage['champ_id'].' '.
'FROM '.$resultat_infos_annuaire['aa_bdd'].'.'.$resultat_infos_annuaire['aa_table'].' '.
'WHERE '.$champs_mappage['champ_mail'].' = '.$this->proteger($mail_utilisateur);
 
 
//echo $requete_selection_utilisateur;
$resultat_selection_utilisateur = $this->requeteUn($requete_selection_utilisateur);
 
// en cas d'erreur on renvoie false
// TODO: lever une exception
if(!$resultat_selection_utilisateur) {
return false;
} else {
return $resultat_selection_utilisateur[$champs_mappage['champ_id']];
}
 
}
 
/**
* Récupère les champs demandé dans l'annuaire indiqué
* @param int $id_annuaire l'identifiant de l'annuaire dans lequel on va travailler
477,7 → 582,7
trigger_error('impossible de récupérer les informations de la table '.$id_annuaire);
}
 
$requete_nombre_inscrits = 'SELECT COUNT(*) AS est_inscrit'.
$requete_nombre_inscrits = 'SELECT COUNT(*) AS est_inscrit '.
' FROM '.$resultat_informations_annuaire['aa_bdd'].'.'.$resultat_informations_annuaire['aa_table'].
' WHERE '.$champs_mappage[0]['champ_mail'].' = '.$this->proteger($mail);