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); |
|