Source for file Ldap2Mysql.php
Documentation is available at Ldap2Mysql.php
/*-----------------------------------------------------------------------*
projet : Ldap2Mysql-Authentification
CHEFS DE PROJETS : P.BAFFALIE, S.GRESSARD
Description : importation des utilisateurs ldap=>mysql et gestion du mode d'authentification
Environnement PHP : PHP4 OU PHP5
author : nordine.zetoutou<nzetoutou@educagri.fr>
date de création : 25 sept. 06
Historique de modification :
/*-----------------------------------------------------------------------*/
* @author Nordine Zetoutou - <nzetoutou@educagri.fr>
* @package Ldap2Mysql-Authentification
* @description importation/mise à jour des utilisateurs ldap=>mysql
* @dependance activation de l'extension php_ldap
* @dependance si CAS comme serveur d'authentification activation de l'extension=php_curl.dll
* @dependance module de gestion de langue : Lang
//tableau contenant les droits utilisateurs
'field_groupeType' =>
'_ident'
//masque le select des bases
//initialisation du filtre de recherche ldap
* @description initialise la classe avec
//chargement d'un tableau des libelles et messages selon la langue par
define('MODULE_DIR','ldap2Mysql/');
define('TEMP_DIR', MODULE_DIR .
'tmp/');
define('CONFIG_DIR', MODULE_DIR .
'/config/');
define('CONFIG_DOC', MODULE_DIR .
'/doc/');
define('IMAGE_DIR', MODULE_DIR .
'/images/');
//on tente de créer les différents répertoires si inexistants avec droits entiers
@ mkdir(MODULE_DIR .
'/tmp', 0777);
@ mkdir(MODULE_DIR .
'/config', 0777);
@ mkdir(MODULE_DIR .
'/images', 0777);
$this->fBaseAuth =
CONFIG_DIR .
'baseAuth';
* @description manuel d'utilisation simplifié
* @todo à complèter ou à améliorer
$file =
MODULE_DIR .
'manual/' .
'manual_' .
$this->lang .
'.txt';
$fFile =
$this->fBaseAuth;
if (!empty ($_POST['btn_validerSelect']))
if (!empty ($_POST['select_listBase']))
if ($_POST['select_listBase'] ==
'NoAuthentification')
//si le fichier n'existe pas on tente de le créer
$handle =
fopen($fFile, 'w+');
fwrite($handle, 'NoAuthentification');
$selected_item =
'NoAuthentification';
//on charge les informations de la base choisi et on crée un fichier de config
switch ($obj->type->value)
$arr['id'] =
$obj->id->value;
$arr['type'] =
$obj->type->value;
$arr['host'] =
$obj->host->value;
$arr['port'] =
$obj->port->value;
$arr['id'] =
$obj->id->value;
$arr['type'] =
$obj->type->value;
$arr['host'] =
$obj->host->value;
$port =
$obj->port->value;
$arr['login_field'] =
$obj->login_field->value;
$arr['ldap_user_id_field'] =
$obj->ldap_user_id_field->value;
$arr['dn'] =
$obj->dn->value;
//si le fichier n'existe pas on tente de le créer
$handle =
fopen($fFile, 'w+');
//on charge le serveur activé
* @description récupère le contenu du fichier : soit une config d'une base soit une
* chaine spécifiant que le mode d'authentification externe est désactivé
* @return object $oBase ou string null
$fFile =
$this->fBaseAuth;
if ($sFileContent ==
'NoAuthentification')
return 'NoAuthentification';
//alors c'est un objet base
* @description affiche le mode d'authentification à choisir
foreach ($arr as $key =>
$oBase)
//on prend que le cas et le ldap
if ($oBase->type->value <>
'mysql')
$aoListeBase[$key] =
$oBase;
$obj->nom =
new stdClass();
$obj->nom->value =
$this->aParamLang['authMode']['NoAuthentification'];
$aoListeBase['NoAuthentification'] =
$obj;
$aContent[] =
'<div class="row">';
$aContent[] =
'<span>' .
$this->aParamLang['authMode']['libelle_1'] .
' : </span>';
$selected_item =
$contentFile->id;
$selected_item =
$contentFile;
* @description fonction de suppression d'un objet (représentant une configuration d'une importation) dans le fichier import
* @param objet $oParamImport
$file =
CONFIG_DIR .
'importConfig';
//on charge le fichier texte, chaque ligne est un objet
$aObjet[$objetToSerialize->id] =
$objetToSerialize;
if ($sDelete ==
'delete')
unset
($aObjet[$objetToSerialize->id]);
//si le fichier n'existe pas on tente de le créer
$handle =
@ fopen($file, 'w+');
$bIsSucceed =
@ fclose($handle);
$_SESSION['Ldap2Mysql']['writeFileMessageSucceed'] =
$this->aParamLang['config_import']['writeFileMessageSucceed'];
$_SESSION['Ldap2Mysql']['writeFileMessageNotSucceed'] =
$this->aParamLang['config_import']['writeFileMessageNotSucceed'];
* @description execute les actions relatives aux chargements des champs ldap et mysql
* execute les actions relatives à l'ajout/suppression des champs de correspondance
if (!empty ($_POST['btn_addToListFieldsToImport']))
if (!empty ($_POST['select_ldap_ListFields']) AND !empty ($_POST['select_mysql_ListFields']))
//le champ ldap à correspondre
$ldapFieldToConnect =
$_POST['select_ldap_ListFields'];
//le champ mysql à correspondre
$mysqlFieldToConnect =
$_POST['select_mysql_ListFields'];
$aCorrespondance =
array (
'ldap_ListFields' =>
$ldapFieldToConnect,
'mysql_ListFields' =>
$mysqlFieldToConnect
//la création d'un id unique par md5 facilite la suppression
$correspondance_id =
md5($ldapFieldToConnect);
//stocke la liste des champs ldap et mysql sous forme de tableaux
$_SESSION['Ldap2Mysql']['listFieldsToImport'][$correspondance_id] =
$aCorrespondance;
//suppression des doublons des champs mysql
$session =
$_SESSION['Ldap2Mysql']['listFieldsToImport'];
//on regarde si 2 champs mysql similaire existe
foreach ($session as $key =>
$array)
if ($mysqlFieldToConnect ==
$array['mysql_ListFields'])
if (count($keyTrouve) >
1)
unset
($_SESSION['Ldap2Mysql']['listFieldsToImport'][$keyTrouve[0]]);
if (!empty ($_POST['btn_loadListFields']))
if (isset
($_SESSION['Ldap2Mysql']['listFieldsToImport']))
unset
($_SESSION['Ldap2Mysql']['listFieldsToImport']);
if (!empty ($_POST['select_listeBase_ldap']) AND !empty ($_POST['select_listeBase_mysql']))
$_SESSION['Ldap2Mysql']['ldap_selected_id'] =
$_POST['select_listeBase_ldap'];
$_SESSION['Ldap2Mysql']['mysql_selected_id'] =
$_POST['select_listeBase_mysql'];
if (!empty ($_POST['btn_enregisterImportConfig']))
$ldap_selected_id =
$_SESSION['Ldap2Mysql']['ldap_selected_id'];
$mysql_selected_id =
$_SESSION['Ldap2Mysql']['mysql_selected_id'];
$oParamImport =
new stdClass();
//on cree un id pour cet import qui sera une date avec l'heure
$oParamImport->id =
md5($ldap_selected_id .
$mysql_selected_id);
//l'id du ldap (défini lors de son enregistrement dans le fichier de config)
$oParamImport->ldap_id =
$ldap_selected_id;
//l'id du mysql (défini lors de son enregistrement dans le fichier de config)
$oParamImport->mysql_id =
$mysql_selected_id;
$oParamImport->mysql_detailedListFields =
$_SESSION['Ldap2Mysql']['mysql_detailedListFields'];
if (!empty ($_SESSION['Ldap2Mysql']['listFieldsToImport']))
$oParamImport->listFieldsToImport =
$_SESSION['Ldap2Mysql']['listFieldsToImport'];
//on efface de la session la dernière récupération
foreach ($_POST as $key =>
$value)
//suppression d'une correspondance
if (isset
($array[1]) AND $array[1] ==
'supprimerCorrespondance')
unset
($_SESSION['Ldap2Mysql']['listFieldsToImport'][$array[2]]);
//on sort de la boucle si trouvé
* @description affiche le l'interface de la config
$aContent[] =
'<div class="row">';
$aContent[] =
'<span class="etape">' .
$this->aParamLang['base']['libelle_8'] .
' 1 :</span>';
//liste de tous les serveurs
$aContent[] =
'<div class="colonneGauche">';
//on récupère toutes les base mysql et ldap
$aLdapAllBases =
$aAllBases['ldap'];
$aMysqlAllBases =
$aAllBases['mysql'];
//liste des serveurs ldap
$aContent[] =
'» ' .
$this->aParamLang['base']['libelle_1'] .
' <b>LDAP</b> <br/>' .
$this->formSelectComponent('select_listeBase_ldap', $aLdapAllBases, array (
//liste des serveurs mysql
$aContent[] =
'<div class="colonneDroite">';
$aContent[] =
'» ' .
$this->aParamLang['base']['libelle_1'] .
' <b>MYSQL</b> <br/>' .
$this->formSelectComponent('select_listeBase_mysql', $aMysqlAllBases, array (
$aContent[] =
' <input type="submit" name="btn_loadListFields" value="» ' .
$this->aParamLang['base']['libelle_9'] .
'" class="inputSubmit" />';
$aContent[] =
'<div class="row">';
//on supprime le champ unique_id qu'on a crée
unset
($aLdapFields['unique_id']);
unset
($aLdapFields['ldap_user_id']);
if (!empty ($aLdapFields) AND !empty ($aMysqlFields))
$aContent[] =
'<div class="row">';
$aContent[] =
'<span class="etape">' .
$this->aParamLang['base']['libelle_8'] .
' 2 :</span>';
$aContent[] =
'<div class="colonneGauche">';
$aContent[] =
$this->aParamLang['base']['libelle_6'] .
'<br/>' .
$this->formSelectComponent('select_ldap_ListFields', $aLdapFields) .
' (<b>' .
count($aLdapFields) .
'</b>) ';
$aContent[] =
'<div class="colonneDroite">';
$aContent[] =
$this->aParamLang['base']['libelle_7'] .
'<br/>' .
$this->formSelectComponent('select_mysql_ListFields', $aMysqlFields) .
' (<b>' .
count($aMysqlFields) .
'</b>) ';
$aContent[] =
'<input type="submit" name="btn_addToListFieldsToImport" value="» ' .
$this->aParamLang['ldap_import']['libelle_10'] .
'" class="inputSubmit" />';
$aContent[] =
'<div class="row">';
$array =
@ $_SESSION['Ldap2Mysql']['listFieldsToImport'];
$aContent[] =
'<div class="row">';
$aContent[] =
SPACE2 .
'<table summary="correspondance" id="ldap_import_correspondance" cellpadding="0" cellspacing="0">';
foreach ($array as $key =>
$aFields)
//l'utilisation de md5 permet d'avoir un id avec chiffre et lettres uniquement
$champ_ldap =
$aFields['ldap_ListFields'];
$champ_mysql =
$aFields['mysql_ListFields'];
$aContent[] =
SPACE3 .
'<tr>';
$aContent[] =
SPACE4 .
'<td><input type="image" name="btn_supprimerCorrespondance_' .
$key .
'" src="' .
IMAGE_DIR .
'iconeSupprimer.png" value="' .
$key .
'" title="' .
$this->aParamLang['ldap_import']['libelle_11'] .
'" alt="' .
$this->aParamLang['ldap_import']['libelle_11'] .
'" />';
$aContent[] =
SPACE4 .
'</td>';
$aContent[] =
SPACE4 .
'<td>' .
$champ_ldap;
$aContent[] =
SPACE4 .
'</td>';
$aContent[] =
SPACE4 .
'<td><img src="' .
IMAGE_DIR .
'fleche.png" title="" alt="" /> ';
$aContent[] =
SPACE4 .
'<td>' .
$champ_mysql;
$aContent[] =
SPACE4 .
'</td>';
$aContent[] =
SPACE3 .
'</tr>';
$aContent[] =
SPACE2 .
'</table>';
if (!empty ($_SESSION['Ldap2Mysql']['errorConnexionMysql']))
$aContent[] =
'<div class="row">';
$aContent[] =
'<span class="errorMessage">» ' .
$_SESSION['Ldap2Mysql']['errorConnexionMysql'] .
'</span>';
if (!empty ($_SESSION['Ldap2Mysql']['errorUniqueId']))
$aContent[] =
'<div class="row">';
$aContent[] =
'<span class="errorMessage">» ' .
$_SESSION['Ldap2Mysql']['errorUniqueId'] .
'</span>';
unset
($_SESSION['Ldap2Mysql']['errorUniqueId']);
if (!empty ($_SESSION['Ldap2Mysql']['errorConnexionLdap']))
$aContent[] =
'<div class="row">';
$aContent[] =
'<span class="errorMessage">» ' .
$_SESSION['Ldap2Mysql']['errorConnexionLdap'] .
'</span>';
unset
($_SESSION['Ldap2Mysql']['errorConnexionLdap']);
if (!empty ($_SESSION['Ldap2Mysql']['listFieldsToImport']))
$aContent[] =
'<div class="row">';
$aContent[] =
'<div class="row">';
$aContent[] =
'<span class="etape">' .
$this->aParamLang['base']['libelle_8'] .
' 3 :</span>';
$aContent[] =
'<div class="row">';
$aContent[] =
'<input type="submit" name="btn_enregisterImportConfig" value="» ' .
$this->aParamLang['ldap_import']['libelle_12'] .
'" class="inputSubmit" />';
if (!empty ($_SESSION['Ldap2Mysql']['writeFileMessageSucceed']))
$sMessage =
$_SESSION['Ldap2Mysql']['writeFileMessageSucceed'];
unset
($_SESSION['Ldap2Mysql']['writeFileMessageSucceed']);
if (!empty ($_SESSION['Ldap2Mysql']['writeFileMessageNotSucceed']))
$sMessage =
$_SESSION['Ldap2Mysql']['writeFileMessageNotSucceed'];
unset
($_SESSION['Ldap2Mysql']['writeFileMessageNotSucceed']);
$aContent[] =
'<div class="row">';
$aContent[] =
'<span class="errorMessage">» ' .
$sMessage .
'</span>';
* @description retourne un tableau de la liste de tous les champs ldap
* @return array $_SESSION['Ldap2Mysql']['aListeCles']
if (!empty ($_POST['select_listeBase_ldap']))
//unset ($_SESSION['Ldap2Mysql']['listFieldsToImport']);
$oBase_id =
$_POST['select_listeBase_ldap'];
//---------------------------------------------------------------------------------------------//
foreach ($object as $key =>
$obj)
$oLdap-> $key =
$obj->value;
$arrayParam['justeFields'] =
true;
$oLdap->filter =
'(objectclass=*)';
if (isset
($array['Ldap2Mysql']['errorUniqueId']))
return $array['Ldap2Mysql']['errorUniqueId'];
if (isset
($array['ldap']['ldap_ListFields']))
$_SESSION['Ldap2Mysql']['ldap_ListFields'] =
$array['ldap']['ldap_ListFields'];
return $array['ldap']['ldap_ListFields'];
* @description retourne un tableau de la liste de tous les champs mysql
* @return array $_SESSION['Ldap2Mysql']['aListeCles']
//on récupère les users des id sélectionnées
$aCheckbox_user =
@ $_POST['checkbox_user'];
if (!empty ($aCheckbox_user))
foreach ($aCheckbox_user as $unique_id)
foreach ($_POST as $key =>
$value)
$aSelectedUsers[$unique_id] =
$_SESSION['Ldap2Mysql']['aoUser'][$unique_id];
if ($tab[0] ==
$unique_id)
$_SESSION['Ldap2Mysql']['aoUser'][$unique_id][$champLdap] =
trim($value);
$aSelectedUsers[$unique_id] =
$_SESSION['Ldap2Mysql']['aoUser'][$unique_id];
if (isset
($aSelectedUsers))
} //fin function ldap_import_appliquerModifSelectUsers()
* @description fonction de chargement de la liste des config d'importations
$file =
CONFIG_DIR .
'importConfig';
//on charge le tableau d'objets texte avec désérialisation
foreach ($aObjet as $key =>
$objet)
//on charge le nom des base ldap
if (isset
($oLdap->nom->value))
$nom_ldap =
$oLdap->nom->value;
//on charge le nom des base mysql
if (isset
($oMysql->nom->value))
$nom_mysql =
$oMysql->nom->value;
if (isset
($nom_ldap) AND isset
($nom_mysql))
$aOption[$objet->id] =
$nom_ldap .
' -> ' .
$nom_mysql;
* @description charge une config en fonction de son id
$file =
CONFIG_DIR .
'importConfig';
//on charge le fichier texte, chaque ligne est un objet
$oParamImport =
$aObjet[$configImport_id];
//on récupèrela liste des champs ldap
if (isset
($oParamImport))
//chargement des champs des 2 bases
if (isset
($_SESSION['Ldap2Mysql']['ldap_listFieldsToImport']))
unset
($_SESSION['Ldap2Mysql']['ldap_listFieldsToImport']);
if (isset
($_SESSION['Ldap2Mysql']['mysql_listFieldsToImport']))
unset
($_SESSION['Ldap2Mysql']['mysql_listFieldsToImport']);
foreach ($oParamImport->listFieldsToImport as $key =>
$value)
$_SESSION['Ldap2Mysql']['ldap_listFieldsToImport'][] =
$value['ldap_ListFields'];
$_SESSION['Ldap2Mysql']['mysql_listFieldsToImport'][] =
$value['mysql_ListFields'];
$_SESSION['Ldap2Mysql']['confListFieldsToImport'] =
$oParamImport->listFieldsToImport;
//liste détaillee des champs de la table
$_SESSION['Ldap2Mysql']['mysql_detailedListFields'] =
$oParamImport->mysql_detailedListFields;
//on garde en session les propriétés des 2 base
//on construit un objet plus simple avec juste le champ valeur de chaque propriété
foreach ($arr as $key =>
$propertie)
$aLdap[$key] =
$propertie->value;
$oLdap = (object)
$aLdap;
//on construit un objet plus simple avec juste le champ valeur de chaque propriété
foreach ($arr as $key =>
$propertie)
$aMysql[$key] =
$propertie->value;
$oMysql = (object)
$aMysql;
$array['oLdap'] =
$oLdap;
$array['oMysql'] =
$oMysql;
* @description execute l'importation
if (!isset
($aSelectedUsers))
//une connexion est déjà initialisée en activant l'importation
//---------------------------------------------------------------------------------------------//
//on récupère la liste des personnes déjà importés
//id de la config $_SESSION['Ldap2Mysql']['ldap_config_import_id']
$sldap_config_import_id =
$_SESSION['Ldap2Mysql']['ldap_config_import_id'];
//on leur affecte une nouvelle propriété dans la session
//---------------------------------------------------------------------------------------------//
//on vérifie si les champs d'import exitent dans la base mysql
if (isset
($aFieldsToAdd) AND is_array($aFieldsToAdd))
//---------------------------------------------------------------------------------------------//
foreach ($aSelectedUsers as $user)
//on indique quelle type de requête, servira pour l'affichage à la afin de l 'import
$sUpdateOrInsert =
'update';
//on initialise le début de la requête
//on initialise la fin de la requête
$sWhere =
' WHERE ldap_user_id' .
"='" .
$user['ldap_user_id'] .
"'";
//on indique quelle type de requête, servira pour l'affichage à la afin de l 'import
$sUpdateOrInsert =
'insert';
//on affecte notre tableau initialisé à un autre qui se verra écraser certains champs
$arr['ldap_user_id'] =
"ldap_user_id='" .
trim($user['ldap_user_id']) .
"'";
$arr['ldap_config_import_id'] =
"ldap_config_import_id='" .
$_SESSION['Ldap2Mysql']['ldap_config_import_id'] .
"'";
$arr['ldap_last_update'] =
"ldap_last_update='" .
date('Y-m-d H:i:s') .
"'";
//on parcourt la liste de tous les champs de la tableau
//un exemple de value est value=array( 'ldap_ListFields'=> 'mail','mysql_ListFields' => '_email')
foreach ($_SESSION['Ldap2Mysql']['confListFieldsToImport'] as $key =>
$value)
if (isset
($value['ldap_ListFields']) AND isset
($user[$value['ldap_ListFields']]))
$arr[$value['mysql_ListFields']] =
$value['mysql_ListFields'] .
"='" .
addslashes(trim($user[$value['ldap_ListFields']])) .
"'";
//on affecte à tous les utilisateurs le droit choisi
if (!empty ($_POST['select_usersGroups']))
//on crée un tableau assoc avec comme clé l'unique_id du ldap
$aQuery[$user['unique_id']] =
$sQuery .
$sWhere;
$aUpdateOrInsert[$user['unique_id']] =
$sUpdateOrInsert;
//destruction des variables
unset
($sUpdateOrInsert);
} //fin ldap_import_finalize()
* @description execute le chargement des utilisateurs du ldap (si click su bouton 'charger liste')
* et charge un tableau de session qui est réutilisé
* sinon renvoi le tableau de session chargé la première fois
* @return un tableau d'objets des utilisateurs
if (!empty ($_POST['btn_loadUsers']))
//pour l'affichage du résultat
//si des utilsateurs ont été déjà sélectionnés dans une autre config, on les supprime
if (isset
($_SESSION['Ldap2Mysql']['selectedUsers']))
unset
($_SESSION['Ldap2Mysql']['selectedUsers']);
//on remet à zéro la pagination
if (!empty ($_POST['select_configImport']))
unset
($_SESSION['Ldap2Mysql']['numeroPage']);
if (!empty ($_POST['select_configImport']))
//on charge la config qui va alimenter des variables de sessions
//on charge les propriétés du ldap de la config
$_SESSION['Ldap2Mysql']['ldap_config_import_id'] =
$_POST['select_configImport'];
//on construit un filtre par défaut
$filter =
'(|'; // |=or &=et
foreach ($_SESSION['Ldap2Mysql']['ldap_listFieldsToImport'] as $key =>
$value)
$filter .=
'(' .
$value .
'=*)';
$oLdap->filter =
$filter;
if (!empty ($_POST['txt_filter']))
$oLdap->filter =
str_replace(' ', '', $_POST['txt_filter']);
//pour recharger le filtre
$arrayParam['ldap_listFieldsToImport'] =
$_SESSION['Ldap2Mysql']['ldap_listFieldsToImport'];
if (isset
($array['ldap']['aoUser']))
$_SESSION['Ldap2Mysql']['aoUser'] =
$array['ldap']['aoUser'];
return $array['ldap']['aoUser'];
if (isset
($_SESSION['Ldap2Mysql']['aoUser']))
//pour l'affichage du résultat
return $_SESSION['Ldap2Mysql']['aoUser'];
} //fin function ldap_import_getUsers()
if (empty ($oLdap->port))
$oLdap->port =
389; //port ldap par défaut
//$bBind = ldap_bind($ressource_link, $oLdap->login, $oLdap->pass);
$bBind =
@ ldap_bind($ressource_link, $oLdap->login, $oLdap->pass);
$bBind =
@ ldap_bind($ressource_link, '', '');
$_SESSION['Ldap2Mysql']['errorConnexionLdap'] =
$this->aParamLang['config_import']['errorConnexionLdap'];
$result =
@ ldap_search($ressource_link, $oLdap->dn, $oLdap->filter);
//on libère la mémoire serveur
foreach ($aEntries as $key =>
$entrie)
foreach ($entrie as $_key =>
$attribut)
//si $attribut n'est pas un tableau donc a une valeur=1
if ($attribut['count'] == (int)
1)
unset
($attribut['count']); //on n'a pas besoin de ce tableau
$value =
strtolower(trim($attribut[0])); //on prend la première valeur
unset
($attribut['count']);
if ($_key ==
$oLdap->ldap_user_id_field)
$user['ldap_user_id'] =
$value;
//utile pour la manipulation des données en session
//on rajoute une chaine dans l'id car les id de balise n'autorise pas un début de chaine en numérique
$user['unique_id'] =
'md5' .
md5($value);
//on crée un tableau de toutes les clés car certains users n'ont pas certains attributs
//on met comme clé le champ lui même cela permet d'avoir un tableau dont la liste est unique
$aListeCles[$_key] =
$_key;
//on ajoute ce champ comme clé
$aListeCles['ldap_user_id'] =
'ldap_user_id';
$aListeCles['unique_id'] =
'unique_id';
//on constitue un tableau d'objet
if ($bLdap_user_id ==
false)
$_SESSION['Ldap2Mysql']['errorUniqueId'] =
$this->aParamLang['config_import']['errorUniqueId'];
unset
($_SESSION['Ldap2Mysql']['errorUniqueId']);
if (!isset
($aListeCles))
//idem pour la liste des champs
$array['ldap']['ldap_ListFields'] =
$aListeCles;
//si simple récupération des champs
if (isset
($arrayParam['justeFields']) AND $arrayParam['justeFields'] ==
true)
//si affichage des utilisateurs
foreach ($aUserTemp as $index =>
$user)
foreach ($aListeCles as $cle)
if (!isset
($user[$cle]))
//donc pour éviter des erreurs php on leurs affecte une chaine vide
$arr[$cle] =
$user[$cle];
//on ajoute au tableau le tableau de l'utilisateur
$aUser[$user['unique_id']] =
$arr;
//on stocke cette liste dans une session pour éviter de réinterroger le ldap
$array['ldap']['aoUser'] =
$aUser;
* @description enregistre le filtre saisie pour le recharger
//on éfface la dernière saisie
unset
($_SESSION['Ldap2Mysql']['sFilter']);
$_SESSION['Ldap2Mysql']['sFilter'] =
$sFilter;
* @description permet de recharger le filtre saisi
* @return string $_SESSION['Ldap2Mysql']['sFilter']
if (isset
($_SESSION['Ldap2Mysql']['sFilter']))
return $_SESSION['Ldap2Mysql']['sFilter'];
//on crée une connexion avec selection de la base
if (!empty ($_POST['select_configImport']))
if (!empty ($_POST['btn_finaliserModifSelectUsers']))
* @description affiche la vue de l'interface d'importation
//liste des serveurs ldap
$aContent[] =
SPACE1 .
'<div class="row">';
$aContent[] =
'<div class ="divLeft">' .
$this->aParamLang['ldap_import']['libelle_13'] .
' : </div>';
$aContent[] =
'<div class ="divRight">';
$aContent[] =
$this->formSelectComponent('select_configImport', $aConfigImport, $aOption =
array (
'onchange="clearField();"'
$aContent[] =
SPACE1 .
'</div>';
//case à cocher de visualisation des users déjà importées
$aContent[] =
SPACE1 .
'<div class="row">';
$aContent[] =
'<div class ="divLeft"> </div>';
$aContent[] =
'<div class ="divRight">';
$aContent[] =
'<input type="checkbox" checked="checked" id="checkbox_includeImportedUsers" name="checkbox_includeImportedUsers" />' .
$this->aParamLang['ldap_import']['libelle_22'];
$aContent[] =
SPACE1 .
'</div>';
$aContent[] =
SPACE1 .
'<br/>';
$aContent[] =
SPACE1 .
'<div class="row">';
$aContent[] =
'<div class ="divLeft">';
$aContent[] =
$this->aParamLang['ldap_import']['libelle_2'] .
' : ';
$aContent[] =
'<div class ="divRight">';
$aContent[] =
'<input type="text" id="txt_filter" name="txt_filter" value="' .
$this->ldap_import_getFilter() .
'" class="inputText" size="50" />';
$aContent[] =
SPACE1 .
'</div>';
$libelle =
$this->aParamLang['ldap_import']['libelle_5'];
$nombreUser =
count($aoUser);
$libelle =
$this->aParamLang['ldap_import']['libelle_3'];
$libelle =
$this->aParamLang['ldap_import']['libelle_5'];
case $nombreUser > (int)
1 :
$libelle =
$this->aParamLang['ldap_import']['libelle_4'];
if (isset
($_SESSION['Ldap2Mysql']['ldap_config_import_id']))
if (!isset
($_POST['checkbox_includeImportedUsers']))
$nombreUser =
$nombreUser -
count($aInsertedUsers);
if (isset
($this->result))
//résultat nombre personnes trouvées
$aContent[] =
SPACE1 .
'<div class="row">';
$aContent[] =
'<div class ="divLeft"> ';
$aContent[] =
'<div class ="divRight">';
$aContent[] =
' » <span class="redBold">' .
$nombreUser .
'</span> ' .
$libelle;
$aContent[] =
SPACE1 .
'</div>';
$aContent[] =
SPACE1 .
'<div class="row">';
$aContent[] =
'<div class ="divLeft"> ';
$aContent[] =
'<div class ="divRight">';
$aContent[] =
SPACE2 .
$this->formInputComponent('submit', 'btn_loadUsers', '» ' .
$this->aParamLang['ldap_import']['libelle_26'], array (
$aContent[] =
SPACE1 .
'</div>';
$aContent[] =
SPACE1 .
'<br/><br/>';
//select des droits utlisateurs
$aContent[] =
SPACE1 .
'<div class="row">';
$aContent[] =
'<div class ="divLeft">' .
$this->aParamLang['ldap_import']['libelle_21'] .
' : ';
$aContent[] =
'<div class ="divRight">';
$aContent[] =
SPACE1 .
'</div>';
$aContent[] =
SPACE1 .
'<br/><br/>';
$aContent[] =
SPACE1 .
'<div class="row">';
$aContent[] =
'<div class ="divLeft"> ';
$aContent[] =
'<div class ="divRight">';
$aContent[] =
SPACE2 .
$this->formInputComponent('submit', 'btn_finaliserModifSelectUsers', '» ' .
$this->aParamLang['ldap_import']['libelle_16'], array (
$aContent[] =
SPACE1 .
'</div>';
$aContent[] =
SPACE1 .
'<br/><br/>';
$aContent[] =
SPACE1 .
'<div id="legende">';
$listePicto =
'<img src="' .
IMAGE_DIR .
'croix.png" title="" alt="" /> ' .
$this->aParamLang['ldap_import']['libelle_19'] .
' ';
$listePicto .=
'<img src="' .
IMAGE_DIR .
'coche.png" title="" alt="" /> ' .
$this->aParamLang['ldap_import']['libelle_18'] .
' ';
$listePicto .=
'<img src="' .
IMAGE_DIR .
'exclamation_orange.png" title="" alt="" /> ' .
$this->aParamLang['ldap_import']['libelle_20'] .
' ';
$listePicto .=
'<img src="' .
IMAGE_DIR .
'refresh.png" title="" alt="" /> ' .
$this->aParamLang['ldap_import']['libelle_27'] .
' ';
$aContent[] =
$listePicto;
$aContent[] =
SPACE1 .
'</div>';
//gestion de la pagination
$aContent[] =
SPACE1 .
'<div class="row">';
//on récupère un objet pager : avec les prop iLimiteInferieure et iNombreLignesAffichees
$iTotalUser =
count($aoUser);
$oPager =
$this->pager($iTotalUser);
//on découpe le tableau et on préserve les clés associatives
$aoUser_sliced_arrays =
array_chunk($aoUser, $oPager->iNombreLignesAffichees, true);
//$_SESSION['aoUser_sliced_arrays']=$aoUser_sliced_arrays;
if ($oPager->iNumeroPage == (int)
0)
$aContent[] =
SPACE2 .
$this->formInputComponent('submit', 'btn_preview', '« ' .
$this->aParamLang['ldap_import']['libelle_30'], array (
'class' =>
'inputSubmit',
$aContent[] =
SPACE2 .
$this->formInputComponent('submit', 'btn_preview', '« ' .
$this->aParamLang['ldap_import']['libelle_30'], array (
if (isset
($oPager->bStop) AND $oPager->bStop ==
true)
$aContent[] =
SPACE2 .
$this->formInputComponent('submit', 'btn_next', $this->aParamLang['ldap_import']['libelle_29'] .
' »', array (
'class' =>
'inputSubmit',
$aContent[] =
SPACE2 .
$this->formInputComponent('submit', 'btn_next', $this->aParamLang['ldap_import']['libelle_29'] .
' »', array (
'onchange="javascript:submit();"'
$aContent[] =
SPACE1 .
'</div>';
$aContent[] =
SPACE1 .
'<div class="row"> ';
$aContent[] =
SPACE1 .
'</div>';
$aContent[] =
'<!-- table des utilisateurs-->';
$aContent[] =
SPACE1 .
'<div class="row">';
$aContent[] =
SPACE2 .
'<table summary="users" class="ldap_import" cellpadding="0" cellspacing="0">';
$aContent[] =
SPACE3 .
'<tr>';
$aContent[] =
SPACE4 .
'<th>#';
$aContent[] =
SPACE4 .
'</th>';
$aContent[] =
SPACE4 .
'<th>';
$aContent[] =
SPACE4 .
'<input type="checkbox" id="checkbox_selectAll" name="checkbox_selectAll" onclick="selectAll();" />';
$aContent[] =
SPACE4 .
'</th>';
$aContent[] =
SPACE4 .
'<th>';
$aContent[] =
SPACE4 .
'</th>';
foreach ($_POST as $key =>
$value)
if (isset
($tab[0]) AND $tab[0] ==
'sortBy')
if (isset
($_SESSION['Ldap2Mysql']['sSortBy']))
if ($_SESSION['Ldap2Mysql']['sSortBy'] ==
'ASC')
$_SESSION['Ldap2Mysql']['sSortBy'] =
'DESC';
$_SESSION['Ldap2Mysql']['sSortBy'] =
'ASC';
$_SESSION['Ldap2Mysql']['sSortBy'] =
'ASC';
$sSortBy =
@ $_SESSION['Ldap2Mysql']['sSortBy'];
$pictoDesc =
IMAGE_DIR .
'desc.png';
//on récupère un tableau des propriétés de l'image
//assurera la norme future pour xhtml 2.0
$imageSortType =
'<img src="' .
$pictoDesc .
'" ' .
$imageWidthHeight[3] .
' alt="' .
$this->aParamLang['ldap_import']['libelle_23'] .
'" title="' .
$this->aParamLang['ldap_import']['libelle_23'] .
'" />';
$pictoAsc =
IMAGE_DIR .
'asc.png';
$imageSortType =
'<img src="' .
$pictoAsc .
'" ' .
$imageWidthHeight[3] .
' alt="' .
$this->aParamLang['ldap_import']['libelle_24'] .
'" title="' .
$this->aParamLang['ldap_import']['libelle_24'] .
'" />';
$entete =
'<input type="submit" name="sortBy#' .
$value .
'" value="' .
$value .
'" class="submit_entete" />';
//on n'active que celui qui est cliqueé
if (isset
($sAttribut) AND $sAttribut ==
$value)
$aContent[] =
SPACE4 .
'<th>' .
$imageSortType .
$entete;
$aContent[] =
SPACE4 .
'<th>' .
$entete;
$aContent[] =
SPACE4 .
'</th>';
$aContent[] =
SPACE3 .
'</tr>';
if (isset
($aoUser_sliced_arrays[$oPager->iNumeroPage]))
foreach ($aoUser_sliced_arrays[$oPager->iNumeroPage] as $key =>
$user)
//si case à cocher checkbox_includeImportedUsers activé
if (!isset
($_POST['checkbox_includeImportedUsers']))
//on crée un tabelau avec les clés de ce tableau associatif
if (in_array($oUser->unique_id, $aId_insertedUsers))
//colonne des numéros de lignes,
$numero =
($oPager->iNombreLignesAffichees *
$oPager->iNumeroPage) +
$iterator;
$tr_user[] =
SPACE3 .
'<tr id="TR_' .
$numero .
'">';
$tr_user[] =
SPACE4 .
'<td>' .
$numero .
'</td>';
$tr_user[] =
SPACE4 .
'<td><input id="checkbox_' .
$numero .
'" type="checkbox" name="checkbox_user[]" value="' .
$oUser->unique_id .
'" />';
//on affiche ceux existants dans la base mysql
//on examine l'état de l'insertion déterminé par la nouvelle propriété
//affecté à l'objet oUser lors de la tentative d'insertion
if (isset
($oUser->userImported))
switch ($oUser->userImported)
$tr_user[] =
SPACE4 .
'<td class="White_TD"><img src="' .
IMAGE_DIR .
'coche.png" title="' .
$this->aParamLang['ldap_import']['libelle_18'] .
'" alt="' .
$this->aParamLang['ldap_import']['libelle_18'] .
'" /></td>';
$tr_user[] =
SPACE4 .
'<td class="White_TD"><img src="' .
IMAGE_DIR .
'refresh.png" title="' .
$this->aParamLang['ldap_import']['libelle_20'] .
'" alt="' .
$this->aParamLang['ldap_import']['libelle_18'] .
'" /></td>';
$tr_user[] =
SPACE4 .
'<td class="White_TD"><img src="' .
IMAGE_DIR .
'croix.png" title="' .
$this->aParamLang['ldap_import']['libelle_19'] .
'" alt="' .
$this->aParamLang['ldap_import']['libelle_19'] .
'" /></td>';
if (in_array($oUser->ldap_user_id, $aId_insertedUsers))
$tr_user[] =
SPACE4 .
'<td class="White_TD"><img src="' .
IMAGE_DIR .
'exclamation_orange.png" title="' .
$this->aParamLang['ldap_import']['libelle_20'] .
'" alt="' .
$this->aParamLang['ldap_import']['libelle_18'] .
'" /></td>';
$tr_user[] =
SPACE4 .
'<td> </td>';
//on récupère les td de chaque champ
$tr_user[] =
SPACE4 .
'</td>';
$tr_user[] =
SPACE3 .
'</tr>';
//on ajoute la ligne tr à un tableau pour le trier selon le critère demandé
//on provoque le tri avec $oUser->$sortBy
//$oUser->unique_id évite les doublons
$arraytemp["'" .
$oUser-> $sAttribut .
$oUser->unique_id .
"'"] =
implode("\n", $tr_user);
$arraytemp[] =
implode("\n", $tr_user);
//on active le type de tri selon le cas
//on inclue la numérotation
// foreach ($arraytemp as $value)
// $aTR[] = str_replace('##ITERATOR##', $i++, $value);
$aContent[] =
implode("\n", $arraytemp);
$aContent[] =
SPACE2 .
'</table>';
$aContent[] =
SPACE1 .
'</div>';
} //fin ldap_display_import()
* @description gère la pagination des résultats
function pager($totalData)
//on construit un objet pager (sans class)
$oPager =
new stdclass();
if (!isset
($_SESSION['Ldap2Mysql']['numeroPage']))
$_SESSION['Ldap2Mysql']['numeroPage'] =
0;
$_SESSION['Ldap2Mysql']['nombreLignesAffichees'] =
10; //$this->_aSelect_nombre_Affichage[0];
foreach ($_POST as $_key =>
$_value)
//select_nombre_Affichage
case 'select_nombre_Affichage' :
$_SESSION['Ldap2Mysql']['nombreLignesAffichees'] =
$_POST['select_nombre_Affichage'];
$iLimiteDesactivation =
$_SESSION['Ldap2Mysql']['numeroPage'] *
($_SESSION['Ldap2Mysql']['nombreLignesAffichees']);
if ($iLimiteDesactivation <=
($totalData -
$_SESSION['Ldap2Mysql']['nombreLignesAffichees']))
$_SESSION['Ldap2Mysql']['numeroPage']++
;
$iTotalPage =
ceil($totalData /
$_SESSION['Ldap2Mysql']['nombreLignesAffichees']);
if ($_SESSION['Ldap2Mysql']['numeroPage'] ==
($iTotalPage -
1))
if ($_SESSION['Ldap2Mysql']['numeroPage'] > (int)
0)
$_SESSION['Ldap2Mysql']['numeroPage']--
;
$oPager->iNombreLignesAffichees =
$_SESSION['Ldap2Mysql']['nombreLignesAffichees'];
$oPager->iNumeroPage =
$_SESSION['Ldap2Mysql']['numeroPage'];
if ($_SESSION['Ldap2Mysql']['mysql_listFieldsToImport'])
return $_SESSION['Ldap2Mysql']['mysql_listFieldsToImport'];
* @description récupère les utilisateurs non présents dans le ldap
* @return array d'objets $aoUser
$sQuery .=
" WHERE ldap_user_id IS NULL OR ldap_user_id LIKE ''";
//construction de la requête
//connexion et création d'une ressource
if (isset
($bNoConnexion))
//on récupère la list des champs mysql
$mysql_listFieldsToImport =
$_SESSION['Ldap2Mysql']['mysql_listFieldsToImport'];
//on récupère les données correspondantes
foreach ($mysql_listFieldsToImport as $champ)
$oUser-> $champ =
$row[$champ];
$aContent[] =
SPACE1 .
'<div class="row">» ' .
$this->aParamLang['ldap_import']['libelle_28'];
$aContent[] =
SPACE1 .
'</div><br/>';
//liste des serveurs ldap
$aContent[] =
SPACE1 .
'<div class="row">';
$aContent[] =
'<div class ="divLeft">' .
$this->aParamLang['ldap_import']['libelle_25'] .
' : </div>';
$aContent[] =
'<div class ="divRight">';
$aContent[] =
$this->formSelectComponent('select_configImport', $aConfigImport, $aOption =
array (
'onchange="clearField();"'
$aContent[] =
'<input type="submit" name="btn_loadUsersfromMysql" value="» ' .
$this->aParamLang['ldap_import']['libelle_26'] .
'" class="inputSubmit" />';
$aContent[] =
SPACE1 .
'</div>';
$libelle =
$this->aParamLang['ldap_import']['libelle_5'];
$nombreUser =
count($aoUser);
$libelle =
$this->aParamLang['ldap_import']['libelle_3'];
$libelle =
$this->aParamLang['ldap_import']['libelle_5'];
case $nombreUser > (int)
1 :
$libelle =
$this->aParamLang['ldap_import']['libelle_4'];
if (isset
($this->result))
//résultat nombre personnes trouvées
$aContent[] =
SPACE1 .
'<div class="row">';
$aContent[] =
'<div class ="divLeft"> ';
$aContent[] =
'<div class ="divRight">';
$aContent[] =
' » <span class="redBold">' .
$nombreUser .
'</span> ' .
$libelle;
$aContent[] =
SPACE1 .
'</div>';
$aContent[] =
SPACE1 .
'<div class="row">';
$aContent[] =
SPACE1 .
'</div>';
$aContent[] =
'<!-- table des utilisateurs-->';
$aContent[] =
SPACE1 .
'<div class="row">';
$aContent[] =
SPACE2 .
'<table summary="users" class="ldap_import" cellpadding="0" cellspacing="0">';
$aContent[] =
SPACE3 .
'<tr>';
$aContent[] =
SPACE4 .
'<th>#';
$aContent[] =
SPACE4 .
'</th>';
foreach ($_POST as $key =>
$value)
if (isset
($tab[0]) AND $tab[0] ==
'sortBy')
if (isset
($_SESSION['Ldap2Mysql']['sSortBy']))
if ($_SESSION['Ldap2Mysql']['sSortBy'] ==
'ASC')
$_SESSION['Ldap2Mysql']['sSortBy'] =
'DESC';
$_SESSION['Ldap2Mysql']['sSortBy'] =
'ASC';
$_SESSION['Ldap2Mysql']['sSortBy'] =
'ASC';
$sSortBy =
@ $_SESSION['Ldap2Mysql']['sSortBy'];
$pictoDesc =
IMAGE_DIR .
'desc.png';
$imageSortType =
'<img src="' .
$pictoDesc .
'" ' .
$imageWidthHeight .
' alt="' .
$this->aParamLang['ldap_import']['libelle_23'] .
'" title="' .
$this->aParamLang['ldap_import']['libelle_23'] .
'" />';
$pictoAsc =
IMAGE_DIR .
'asc.png';
$imageSortType =
'<img src="' .
$pictoAsc .
'" ' .
$imageWidthHeight .
' alt="' .
$this->aParamLang['ldap_import']['libelle_24'] .
'" title="' .
$this->aParamLang['ldap_import']['libelle_24'] .
'" />';
foreach ($aListeChampMysql as $key =>
$champ)
$entete =
'<input type="submit" name="sortBy#' .
$champ .
'" value="' .
$champ .
'" class="submit_entete" />';
//on n'active que celui qui est cliqueé
if (isset
($sAttribut) AND $sAttribut ==
$champ)
$aContent[] =
SPACE4 .
'<th>' .
$imageSortType .
$entete;
$aContent[] =
SPACE4 .
'<th>' .
$entete;
$aContent[] =
SPACE4 .
'</th>';
$aContent[] =
SPACE3 .
'</tr>';
foreach ($aoUser as $key =>
$oUser)
$tr_user[] =
SPACE3 .
'<tr>';
//colonne des numéros de lignes, on numérote les lignes avec $key
$tr_user[] =
SPACE4 .
'<td>##ITERATOR##</td>';
foreach ($aListeChampMysql as $champ)
$tr_user[] =
SPACE4 .
'<td>' .
$oUser-> $champ .
'</td>';
$tr_user[] =
SPACE3 .
'</tr>';
//on ajoute la ligne tr à un tableau pour le trier selon le critère demandé
//on provoque le tri avec $oUser->$sortBy
//pour éviter les doublons on ajoute $this->get_temporary_unique_id
$arraytemp[] =
implode("\n", $tr_user);
//on active le type de tri selon le cas
//on inclue la numérotation
foreach ($arraytemp as $value)
$aTR[] =
str_replace('##ITERATOR##', $i++
, $value);
$aContent[] =
SPACE2 .
'</table>';
$aContent[] =
SPACE1 .
'</div>';
* @description liste des champs ldap à afficher
if ($_SESSION['Ldap2Mysql']['ldap_listFieldsToImport'])
return $_SESSION['Ldap2Mysql']['ldap_listFieldsToImport'];
if (isset
($ldap_attributListToDisplay))
//$value étant le champ à afficher donc l'attribut de $oUser
foreach ($ldap_attributListToDisplay as $key =>
$attribut)
//on vérifie quel type de contenu (array,string)
switch (@ gettype($oUser-> $attribut))
//l'attibut est un array donc à parcourir
$select[] =
'<select name="' .
$oUser->unique_id .
'-' .
$attribut .
'">';
foreach ($oUser-> $attribut as $_key =>
$_value)
$select[] =
'<option value="' .
$_value .
'">' .
$_value .
'</option>';
$contentTD =
$oUser-> $attribut;
$td[] =
'<a href="#" title="' .
$contentTD .
'">' .
substr($oUser-> $attribut, 0, 25) .
'...</a>';
return SPACE4 .
'<td class="content">' .
implode('</td>' .
"\n" .
SPACE4 .
'<td class="content">', $td);
//on charge le fichier texte, chaque ligne est un objet
$aObjet[$objetToSerialize->id->value] =
$objetToSerialize;
if ($sDelete ==
'delete')
unset
($aObjet[$objetToSerialize->id->value]);
//si le fichier n'existe pas on tente de le créer
$handle =
fopen($fFile, 'w+');
* @description initialise un objet base (MYSQL, ldap, CAS) avec les
* @param string $sBaseType
//on charge un modèle d'objet
//on redéfinit certaines propriétés sinon on renvoie l'objet tel quel
$oBase->port->required =
false; //pass
$oBase->pass->required =
false; //pass
$oBase->port->required =
false; //port
$oBase->path->required =
false; //path
$oBase->port->required =
false; //port
$oBase->nom->required =
false; //port
* @description gestion de toutes les actions sur l'interface de configuration
$fFile =
CONFIG_DIR .
'baseConfig';
if (!empty ($_POST['type']))
$sBaseType =
$_POST['type'];
$this->formVisible =
false;
//liste des boutons à afficher
$this->listeBoutons =
array (
); //on affiche la liste des serveurs
//on active l'affichage de la date de mise à jour
foreach ($_POST as $key =>
$value)
//l'action est la valeur name du bouton ou le submit du select de la base select_loadBase
if (!empty ($_POST['select_listBase']))
//chargement du modèle de notre objet $oBase
$this->formVisible =
true;
$this->formVisible =
true;
//pour rendre visible le formulaire vide
//on affiche la liste des serveurs
$this->isVisible_btn_Test =
true;
$this->listeBoutons =
array (
$this->formVisible =
true;
foreach ($oBase as $propertie =>
$value)
//pour éviter d'écraser les valeurs par défaut de l'objet
if (isset
($_POST[$propertie]))
$oBase-> $propertie->value =
trim($_POST[$propertie]);
//on récupère au passage la liste des champs saisis
if ($propertie <>
'id' AND $oBase-> $propertie->required ==
1 AND $oBase-> $propertie->value ==
'')
$oBase-> $propertie->valide =
false;
//on vérifie si nom n'existe pas déjà
if (isset
($oBase->nom->value) AND trim($oBase->nom->value) <>
'')
$iNombreBaseTrouve =
$this->baseNomExist($oBase->nom->value);
//on verifie qu'aucun nom n'est déjà attribué
if (isset
($iNombreBaseTrouve))
$oBase->nom->valide =
false;
$oBase->nom->errorMessage =
$this->aParamLang['base']['libelle_13'];
//les champs requis sont remplis on enregistre ET ce n'est pas un tes de connexion
//la première portion faciltera le tri selon le type de base
$oBase->id->value =
$oBase->type->value .
'-' .
md5($oBase->nom->value);
//on affiche la liste des serveurs
$this->listeBoutons =
array (
$this->isVisible_btn_Test =
true;
$this->listeBoutons =
array (
foreach ($oBase as $propertie =>
$value)
//pour éviter d'écraser les valeurs par défaut de l'objet
if (isset
($_POST[$propertie]))
$oBase-> $propertie->value =
trim($_POST[$propertie]);
//on récupère au passage la liste des champs saisis
if ($oBase-> $propertie->required ==
1 AND $oBase-> $propertie->value ==
'')
$oBase-> $propertie->valide =
false;
//on vérifie si nom n'existe pas déjà
$iNombreBaseTrouve =
$this->baseNomExist($oBase->nom->value);
//on verifie qu'aucun nom n'est déjà attribué
if (count($iNombreBaseTrouve) >
1)
$oBase->nom->valide =
false;
$oBase->nom->errorMessage =
$this->aParamLang['base']['libelle_13'];
//les champs requis sont remplis on enregistre
//on affiche la liste des serveurs
$this->listeBoutons =
array (
//on réinitialise l'objet base
$this->listeBoutons =
array (
//on affiche la liste des serveurs
//on met les boutons de contrôles necéssaires
//on affiche la liste des bases
$this->listeBoutons =
array (
} // fin baseConfig_controller($sBaseType)
//selection des différents serveurs pour chaque type
$aContent[] =
'<div class="row">';
$aContent[] =
'<div class ="divLeft">' .
$this->aParamLang['base']['libelle_1'] .
' : </div>';
$aContent[] =
'<div class ="divRight">';
//on récupère un tableau d'objets et on construit le select de la liste des bases
if ($this->formVisible ==
true)
foreach ($oBase as $propertie =>
$value)
//si id de la base, on le met en hidden
$sComponentHidden =
$this->formInputComponent('hidden', 'id', $oBase-> $propertie->value);
//si type de la base, on le met en hidden
'onchange="javascript:submit();"'
), $oBase-> $propertie->value);
$sComponent =
$this->formInputComponent('text', $propertie, $oBase-> $propertie->value, array (
//on charge le label de chaque contrôle
if ($oBase-> $propertie->required ==
true)
$sAsterisque =
'<span style="color:red;font-weight:normal;"> *</span>';
$aContent[] =
'<div class="row">';
$aContent[] =
'<div class ="divLeft">' .
$this->aParamLang['base'][$propertie] .
' : </div>';
$aContent[] =
'<div class ="divRight">' .
$sComponent .
$sAsterisque .
'</div>';
//si la propriété est invalide , on affiche son message d'erreur
if (isset
($oBase-> $propertie->valide) AND $oBase-> $propertie->valide ==
false)
$aContent[] =
'<div class="row">';
$aContent[] =
'<div class ="divLeft"> </div>';
$aContent[] =
'<div class ="divRight">';
$aContent[] =
'<span class="errorMessage">^ ' .
$oBase-> $propertie->errorMessage .
'</span>';
$aContent[] =
$sComponentHidden;
$aContent[] =
'<div id="boutonsControls">';
$aContent[] =
'<div class ="divLeft"> </div>';
$aContent[] =
'<div class ="divRight">';
foreach ($this->listeBoutons as $value)
static $sListeBoutons =
'';
$sListeBoutons .=
$this->formInputComponent('submit', $value, $this->aParamLang[$value], array (
$aContent[] =
$sListeBoutons;
} //fin ldap_get_controlPanel
* @description vérifie si le nom du base existe
//on charge toutes les base selon le type
foreach ($aObjet as $objet)
if (isset
($nom) AND isset
($objet->nom->value))
//on comptabilise le nombre de libelle semblable
//utile pour l'enregistrement et sa modif
* @description charge la config d'une base
* @param string $oBase_id
//on charge toutes les base
//on charge celle choisie
if (isset
($aObjet[$oBase_id]))
return $aObjet[$oBase_id];
$fFile =
CONFIG_DIR .
'baseConfig';
{ //on charge le fichier texte, chaque ligne est un objet
$this->mysql_import_action();
//liste des serveurs mysql
$aContent[] =
'<div class="row">';
$aContent[] =
'<div class ="divLeft">' .
$this->aParamLang['base']['libelle_1'] .
' <b>MYSQL</b> : </div>';
$aContent[] =
'<div class ="divRight">';
$aContent[] =
$this->buildSelectBaseOptions('mysql');
$aContent[] =
'<input type="submit" name="btn_validerSelect" value="OK" class="inputSubmit" />';
if (!empty ($_POST['btn_loadUsers']))
$sQuery =
'SELECT ' .
$field_id .
' ,' .
$field_groupeType;
$sQuery .=
' FROM ' .
$table;
$sQuery .=
' ORDER BY ' .
$field_groupeType;
while ($row =
mysql_fetch_assoc($res)) //on ne récupère pas le champ de la clé primaire
$aFields[$row[$field_id]] =
$row[$field_groupeType];
$_SESSION['Ldap2Mysql']['field_groupeType'] =
$aFields;
return $_SESSION['Ldap2Mysql']['field_groupeType'];
* @description crée les champs gérant l'importation ldap
foreach ($aFieldsToAdd as $field =>
$value)
foreach ($aQuery as $sQuery)
* @description vérifie si les champs gérant l'importation ldap existent
* @return mixed bool si true ou array $aFieldsToAdd nom des champs à créer
//modfication de la table
$aFieldsToAdd['ldap_user_id'] =
'varchar(255) not null';
$aFieldsToAdd['ldap_config_import_id'] =
'varchar(80) not null';
$aFieldsToAdd['ldap_last_update'] =
'datetime not null';
while ($row =
mysql_fetch_assoc($res)) //on ne récupère pas le champ de la clé primaire
//on vérifie si le champ existe dans la liste
$aFound[] =
$row['Field'];
// le nombre de champs voulu doit être = au nombre de champ trouvé
//tous les champs existent
//certains n'existent pas on envoi toute la liste
} //fin mysql_isFieldsExists()
$oMysql =
$arr['oMysql'];
if (empty ($oMysql->port))
$oMysql->port =
3306; //port ldap par défaut
//on transmet un tableau qui représente les propriétés d'une base
$champ['ldap_config_import_id'] =
$row['ldap_config_import_id'];
$champ['ldap_last_update'] =
$row['ldap_last_update'];
$champ['ldap_user_id'] =
$row['ldap_user_id'];
} //fin function mysql_getImportedUsers()
if (!empty ($_POST['select_listeBase_mysql']))
$oBase_id =
$_POST['select_listeBase_mysql'];
$oMysql =
new stdClass();
foreach ($object as $key =>
$obj)
$oMysql-> $key =
$obj->value;
if ($bSelectSucceed ==
true)
while ($row =
mysql_fetch_assoc($res)) //on ne récupère pas le champ de la clé primaire
if ($row['Key'] <>
'PRI')
$aFields[$row['Field']] =
$row;
//on stocke la structure détaillée des tables( type de champ etc..) pour l'enregistrement de la config
$_SESSION['Ldap2Mysql']['mysql_detailedListFields'] =
$aFields;
//on récupère uniquement la liste des champs
//on construit un tableau associatif pour le contrôle select
foreach ($liste as $value)
$_SESSION['Ldap2Mysql']['mysql_ListFields'][$value] =
$value;
//on ne renvoi que le liste des champs
return $_SESSION['Ldap2Mysql']['mysql_ListFields'];
$_SESSION['Ldap2Mysql']['errorConnexionMysql'] =
$this->aParamLang['config_import']['errorConnexionMysql'];
* @description crée une ressource mysql
* @return bool si pas de connexion
if (!empty ($_POST['select_configImport']))
$oMysql =
$arr['oMysql'];
if (empty ($oMysql->port))
$oMysql->port =
3306; //port ldap par défaut
//on transmet un tableau qui représente les propriétés d'une base
$resource_link =
@ mysql_connect($oMysql->host, $oMysql->login, $oMysql->pass);
* @description fonction récupérant les logins de la base mysql
* @return array associatif liste des logins
//construction de la requête
* @description fonction récupérant les personnes déjà importées
* @param string le nom de la config d'importation
* @return array associatif liste objet des personnes importées
//connexion et création d'une ressource
$sWhere =
' WHERE ldap_config_import_id ' .
"='" .
$sldap_config_import_id .
"'";
//construction de la requête
$oInsertedUser =
new stdClass();
$oInsertedUser->ldap_config_import_id =
$row['ldap_config_import_id'];
$oInsertedUser->ldap_user_id =
$row['ldap_user_id'];
$oInsertedUser->ldap_last_update =
$row['ldap_last_update'];
//on crée un tableau respectant l'unicité par ldap_user_id
$arr[$oInsertedUser->ldap_user_id] =
$oInsertedUser;
} //fin function mysql_getInsertedUsers($sldap_config_import_id)
* @description fonction qui va initialiser un tableay dont les clés sont les champs mysql et les valeurs
* sont la valeur default du champ si elle existe, si le champ est obligatoire
* on lui asscie un valeur temporaire sinon une valeur null ou
$aMysql_detailedListFields =
$_SESSION['Ldap2Mysql']['mysql_detailedListFields'];
//on initialise un tabelau avec des valeurs par défaut
foreach ($aMysql_detailedListFields as $champ =>
$champDetail)
//on vérifie la nullité de chaque champ de la base
if ($champDetail['Null'] ==
'YES')
if (!empty ($champDetail['Default']))
//on prend la valeur par défaut du champ
$aMysql_ListFields[$champ] =
$champ .
"='" .
$champDetail['Default'] .
"'";
//sinon on lui affecte la valeur null
$aMysql_ListFields[$champ] =
$champ .
"=null";
if (!empty ($champDetail['Default']))
//on prend la valeur par défaut du champ
$aMysql_ListFields[$champ] =
$champ .
"='" .
$champDetail['Default'] .
"'";
//on prompose un mot de passe pour promethee
//on récupère les logins de la base
//on génère un login unique
//la boucle tourne jusqu'à trouver un login unique
//à la fin, on récupère notre variable $newLogin
//on remplit les champs non nul avec une valeur temporaire unique
//à ne pas confondre avec unique_id qui, lui, vient du ldap
return $aMysql_ListFields;
} //fin function mysql_initializeFieldsToImport()
* @description ajoute les utilisateurs dans la base mysql
* @param array $aQuery les requêtes d'insertion
* @return ajoute des valeurs booléennes de succès (insertion ou mise
* à jour ou non succès dans chaque objet ($aoUser)
foreach ($aQuery as $unique_id =>
$sQuery)
$userLog =
new stdClass();
$userLog->ldap_user_id =
$unique_id;
$userLog->date_import =
date('Y-m-d H:i:s');
* @description crée un login temporaire pour promethée
//fin for{echo "<p style='color:red;font-weight:bold;'> ************* </br></br>*************</p>";
foreach ($aConsonne as $consonne)
$str1 =
$aConsonne[0] .
$aVoyelle[0];
$str2 =
$aConsonne[0] .
$aVoyelle[0];
$arr2[] =
$str2 .
$arr1[0];
$arr[] =
$aVoyelle[0] .
$arr2[0] .
$aConsonne[0] .
$aVoyelle[1];
$arr[] =
$aVoyelle[0] .
$arr2[0] .
$aConsonne[0] .
$aVoyelle[1];
$arr[] =
$aVoyelle[0] .
$aConsonne[1] .
$aConsonne[0] .
$aVoyelle[1];
$arr[] =
$aVoyelle[0] .
$aConsonne[1] .
$aConsonne[0] .
$aVoyelle[1];
* @description crée un mot de passe temporaire pour promethée
* @return string $pass de 4 caract maj et min
* @description récupère les libellés du module selon la langue choisie
* par défaut langue fr_FR
require_once 'Lang/Lang.php';
$aParamLang =
Lang :: getParam($lang);
$this->aParamLang =
$aParamLang['Ldap2Mysql'];
* @description construit un select selon le type de base
//si aucune base n'est configurée
'' =>
$this->aParamLang['base']['noBase']
if (isset
($aoListeBase))
foreach ($aoListeBase as $key =>
$propertieValue)
if (isset
($propertieValue->nom->value))
if ($key ==
'NoAuthentification')
$aData[$key] =
$propertieValue->nom->value;
$aData[$key] =
strtoupper($propertieValue->type->value) .
' » ' .
$propertieValue->nom->value;
'onchange="javascript:submit();"'
* @description construit le menu
'baseConfig' =>
$this->aParamLang['base']['lien_1'],
'importConfig' =>
$this->aParamLang['base']['lien_2'],
'import' =>
$this->aParamLang['base']['lien_3'],
'consult' =>
$this->aParamLang['base']['lien_5'],
'authConfig' =>
$this->aParamLang['base']['lien_4'],
$tab =
explode('&', $_SERVER['QUERY_STRING']);
//en quittant l'ecran de l'import, on supprime le tableau de sessions
if (isset
($_SESSION['Ldap2Mysql']['aoUser']))
unset
($_SESSION['Ldap2Mysql']['aoUser']);
foreach ($array as $key =>
$value)
if (isset
($action) AND $action ==
$key)
$str =
'<li class="selected">' .
$value .
'</li>';
$urlQueryString =
$key .
'&item=23';
$str =
'<li><a href="?' .
$urlQueryString .
'" >' .
$value .
'</a></li>';
return '<ul class="ldapMenu">' .
implode('', $aLien) .
'</ul>';
$attributs['text'] =
array (
$attributs['image'] =
array (
$attributs['hidden'] =
array (
$attributs['submit'] =
array (
$oComponent =
new stdClass();
$oComponent->name =
$elementName;
$oComponent->type =
$type;
$oComponent->value =
$value;
foreach ($oComponent as $key =>
$value)
//on complète le tableau si clé manquante
$attributs[$oComponent->type][$key] =
$value;
foreach ($attributs[$oComponent->type] as $key =>
$value)
$sComponent .=
' ' .
trim($key) .
'="' .
trim($value) .
'"';
//construction des attributs supplémentaires
foreach ($aOptions as $key =>
$value)
$sOptions .=
' ' .
trim($key) .
'="' .
trim($value) .
'" ';
$sComponent .=
$sOptions .
' />';
echo
'le type du input demandé n\'existe pas !';
* @description initialise un objet de champde formulaire
* @return object $oComponent
//on instancie un objet vide sans class
//dont les propriétés seront des objets aussi
foreach ($aBase as $propertie)
$oPropertie =
new stdClass();
$oPropertie->defaultValue =
null;
$oPropertie->value =
null;
$oPropertie->required =
true;
$oPropertie->errorMessage =
$this->aParamLang['base']['errorMessage'];
$oBase-> $propertie =
$oPropertie;
* @description fonction de construction d'un select
* @param1 string <nom du select>
* @param2 array de type associatif (les cles sont transformées en values)
* @param3 array ajoute des fonctionnalités au select exemple du javascript, une classe etc
elseif (!empty ($_POST[$selectName]))
$selected =
$_POST[$selectName];
$select[] =
'<select name="' .
$selectName .
'" ' .
$sOption .
' >';
//on veut la première valuer qui s'affiche
if ($default ==
'freeze')
//$select[] = '<option value=""> </option>';
$select[] =
'<option value=""> </option>';
foreach ($adata as $key =>
$value)
$select[] =
'<option value="' .
$key .
'" selected="selected" >' .
$value .
'</option>';
$select[] =
'<option value="' .
$key .
'">' .
$value .
'</option>';
return "\n" .
implode("\n", $select);
* @description récupère la liste des bases ldap et mysql
foreach ($aObjects as $key =>
$value)
if (isset
($value->type->value))
switch ($value->type->value)
$arr['ldap'][$key] =
$value->nom->value;
$arr['mysql'][$key] =
$value->nom->value;
} //fin function getAllBases()
* @description fonction ajoutant une propriété ou modifiant une valeur d'une propriété dans la session au tableau des users
* $_SESSION['Ldap2Mysql']['aoUser'][$unique_id]['variable']
$_SESSION['Ldap2Mysql']['aoUser'][$unique_id][$variable] =
$value;
* @description supprime des variables de sessions dont on n'a plus besoin
unset
($_SESSION['Ldap2Mysql']['aoUser']);
unset
($_SESSION['Ldap2Mysql']['listFieldsToImport']);
unset
($_SESSION['Ldap2Mysql']['ldap_ListFields']);
unset
($_SESSION['Ldap2Mysql']['ldap_listFieldsToImport']);
unset
($_SESSION['Ldap2Mysql']['mysql_ListFields']);
unset
($_SESSION['Ldap2Mysql']['mysql_listFieldsToImport']);
unset
($_SESSION['Ldap2Mysql']['mysql_detailedListFields']);
* @description fonction de création d'une chaine unique servant pour l'insertion dans la base pour éviter les doublons
$time = (float)
$sec +
((float)
$usec *
100000);
$warning =
'<span style="font-family: \'trebuchet MS\', arial, sans-serif;font-size: 0.7em;color: red;">';
$warning .=
$line .
' <br/> ';
$warning .=
' <span style="font-weight:bold;">Attention : </span><br/>';
$warning .=
$messageWarning .
'<br/>' .
$line .
' <br/> ';
$tab =
explode('&', $_SERVER['QUERY_STRING']);
* @description remplit le div principal avec le contenu de chaque interface
$aContent[] =
'<form id="Ldap2Mysql_form" action="' .
str_replace('&', '&', $_SERVER['REQUEST_URI']) .
'" method="post">';
$aContent[] =
'<div id="ldap2Mysql">';
$aContent[] =
'<div class="row">';
$aContent[] =
'<div class="row"> </div>';
//on récupère une chaine representant le panneau de chaque type de serveur
$aContent[] =
$sControlPanel;
$aContent[] =
'<div class="row"> </div>';
$aContent[] =
'<hr class="ligneHorizontale" />';
//on créé le html de sortie avec un retour chariot pour chaque ligne
Documentation generated on Wed, 22 Nov 2006 11:41:10 +0100 by phpDocumentor 1.3.0RC6