Skip to content
Extraits de code Groupes Projets
Valider ae7d390c rédigé par esj's avatar esj
Parcourir les fichiers

Dans la dernière étape d'une installation avec LDAP, ajout d'un formulaire...

Dans la dernière étape d'une installation avec LDAP, ajout d'un formulaire permettant d'indiquer le nom du champ LDAP correspondant au nom du champ SPIP de la table des auteurs, en particulier le Login, ce qui permet d'éviter les requêtes LDAP systématiquement vaines à chaque connexion d'un auteur. Les champs demandés sont le Login, le Nom, le Mail et la Biographie. On peut surcharger la globale pour en demander plus ou moins. L'installateur peut ne rien mettre dans un champ pour l'ignorer, ou mettre une suite de nom de champs si la correspondance n'est pas unique ou est inconnue. 

Le tableau déduit est sauvé dans le fichier de connexion LDAP, alors que le statut est dans les meta: ça parait bizarre, mais la valeur de celui-ci est une constante indépendante du LDAP (tous visiteurs ou tous rédacteurs etc), tandis que les autres seront à repréciser en cas de déménagement du site. L'exception est moins dans l'emplacement que dans l'invariance du statut, contrairement aux autres champs. On pourrait imaginer de le déduire aussi du LDAP, mais ça sort largement du noyau de SPIP: là il s'agissait seulement de ne plus avoir de requêtes vaines à chaque connexion.
parent 0dd82cfc
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
......@@ -78,6 +78,8 @@ function auth_ldap_connect($serveur='') {
$connexion['ldap'] = array('link' => $GLOBALS['ldap_link'],
'base' => $GLOBALS['ldap_base']);
else spip_log("connection LDAP $serveur mal definie dans $f");
if (isset($GLOBALS['ldap_champs']))
$connexion['ldap']['attributes'] = $GLOBALS['ldap_champs'];
} else spip_log("connection LDAP $serveur inconnue");
}
return $connexions_ldap[$serveur]=$connexion['ldap'];
......
......@@ -207,9 +207,18 @@ function info_progression_etape($en_cours,$phase,$dir, $erreur = false){
// http://doc.spip.org/@fieldset
function fieldset($legend, $champs = array(), $horchamps='') {
$fieldset = "<fieldset>\n" .
($legend ? "<legend>".$legend."</legend>\n" : '');
function fieldset($legend, $champs = array(), $apres='', $avant='') {
return "<fieldset>\n" .
$avant .
($legend ? "<legend>".$legend."</legend>\n" : '') .
fieldset_champs($champs) .
$apres .
"</fieldset>\n";
}
function fieldset_champs($champs = array())
{
$fieldset = '';
foreach ($champs as $nom => $contenu) {
$type = isset($contenu['hidden']) ? 'hidden' : (preg_match(',^pass,', $nom) ? 'password' : 'text');
$class = isset($contenu['hidden']) ? '' : "class='formo' size='40' ";
......@@ -230,7 +239,6 @@ function fieldset($legend, $champs = array(), $horchamps='') {
.(preg_match(',^(pass|login),', $nom)?" autocomplete='off'":'') . " />\n";
}
}
$fieldset .= "$horchamps</fieldset>\n";
return $fieldset;
}
......@@ -429,4 +437,14 @@ function install_etape_liste_bases($server_db, $disabled=array())
return array($checked, $bases);
}
function install_propager($hidden)
{
$res = '';
foreach($hidden as $k) {
$v = htmlentities(_request($k));
$res .= "<input type='hidden' name='$k' value='$v' />";
}
return $res;
}
?>
......@@ -18,8 +18,6 @@ function install_etape_ldap3_dist()
$login_ldap = _request('login_ldap');
$pass_ldap = _request('pass_ldap');
$port_ldap = _request('port_ldap');
$tls_ldap = _request('tls_ldap');
$protocole_ldap = _request('protocole_ldap');
$base_ldap_text = defined('_INSTALL_BASE_LDAP')
? _INSTALL_BASE_LDAP
......@@ -66,22 +64,17 @@ function install_etape_ldap3_dist()
$res .= " checked=\"checked\"";
$checked = true;
}
$res .= " />"
. "\n<label for='manuel'>"._T('entree_chemin_acces')."</label> ";
echo generer_form_ecrire('install', ($res
. "\n<input type='hidden' name='etape' value='ldap4' />"
. "\n<input type='hidden' name='adresse_ldap' value=\"$adresse_ldap\" />"
. "\n<input type='hidden' name='port_ldap' value=\"$port_ldap\" />"
. "\n<input type='hidden' name='login_ldap' value=\"$login_ldap\" />"
. "\n<input type='hidden' name='pass_ldap' value=\"$pass_ldap\" />"
. "\n<input type='hidden' name='protocole_ldap' value=\"$protocole_ldap\" />"
. "\n<input type='hidden' name='tls_ldap' value=\"$tls_ldap\" />"
$res .= " />"
. "\n<label for='manuel'>"._T('entree_chemin_acces')."</label> "
. "\n<fieldset>"
. "<input type='text' name='base_ldap_text' class='text' value=\"$base_ldap_text\" size='40' />"
. "\n</fieldset>"
. bouton_suivant()));
. "\n<input type='hidden' name='etape' value='ldap4' />"
. install_propager(array('adresse_ldap','port_ldap','login_ldap','pass_ldap','protocole_ldap','tls_ldap'))
. bouton_suivant();
echo generer_form_ecrire('install', $res);
echo install_fin_html();
}
......
......@@ -10,6 +10,10 @@
* Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. *
\***************************************************************************/
if (!defined("_ECRIRE_INC_VERSION")) return;
include_spip('auth/ldap');
// http://doc.spip.org/@install_etape_ldap4_dist
function install_etape_ldap4_dist()
{
......@@ -17,16 +21,13 @@ function install_etape_ldap4_dist()
$login_ldap = _request('login_ldap');
$pass_ldap = _request('pass_ldap');
$port_ldap = _request('port_ldap');
$tls_ldap = _request('tls_ldap');
$protocole_ldap = _request('protocole_ldap');
$base_ldap = _request('base_ldap');
$base_ldap_text = _request('base_ldap_text');
if (!$base_ldap) $base_ldap = $base_ldap_text;
echo install_debut_html();
if (!$base_ldap) $base_ldap = $base_ldap_text;
$ldap_link = @ldap_connect($adresse_ldap, $port_ldap);
$ldap_link = ldap_connect($adresse_ldap, $port_ldap);
@ldap_bind($ldap_link, $login_ldap, $pass_ldap);
// Essayer de verifier le chemin fourni
......@@ -43,29 +44,15 @@ function install_etape_ldap4_dist()
info_etape(_T('info_reglage_ldap'));
echo info_progression_etape(4,'etape_ldap','install/');
lire_fichier(_FILE_CONNECT_TMP, $conn);
if ($p = strpos($conn, "'');")) {
ecrire_fichier(_FILE_CONNECT_TMP,
substr($conn, 0, $p+1)
. _FILE_LDAP
. substr($conn, $p+1));
}
$conn = "\$GLOBALS['ldap_base'] = \"$base_ldap\";\n"
. "\$GLOBALS['ldap_link'] = @ldap_connect(\"$adresse_ldap\",\"$port_ldap\");\n"
. "@ldap_set_option(\$GLOBALS['ldap_link'],LDAP_OPT_PROTOCOL_VERSION,\"$protocole_ldap\");\n"
. (($tls_ldap != 'oui') ? '' :
"@ldap_start_tls(\$GLOBALS['ldap_link']);\n")
. "@ldap_bind(\$GLOBALS['ldap_link'],\"$login_ldap\",\"$pass_ldap\");\n";
install_fichier_connexion(_DIR_CONNECT . _FILE_LDAP, $conn);
$statuts = liste_statuts_ldap();
$statut_ldap = defined('_INSTALL_STATUT_LDAP')
? _INSTALL_STATUT_LDAP
: $GLOBALS['liste_des_statuts']['info_redacteurs'];
echo generer_form_ecrire('install', (
"<input type='hidden' name='etape' value='ldap5' />"
$res = install_propager(array('adresse_ldap','port_ldap','login_ldap','pass_ldap','protocole_ldap','tls_ldap'))
. "<input type='hidden' name='etape' value='ldap5' />"
. "<input type='hidden' name='base_ldap' value='" . htmlentities($base_ldap) . "' />"
. fieldset(_T('info_statut_utilisateurs_1'),
array(
'statut_ldap' => array(
......@@ -75,7 +62,10 @@ function install_etape_ldap4_dist()
)
)
)
. bouton_suivant()));
. install_ldap_correspondances()
. bouton_suivant();
echo generer_form_ecrire('install', $res);
}
echo install_fin_html();
......@@ -93,4 +83,19 @@ function liste_statuts_ldap() {
}
return $res;
}
function install_ldap_correspondances()
{
$champs = array();
foreach (is_array($GLOBALS['ldap_attributes']) ? $GLOBALS['ldap_attributes'] : array() as $champ => $v ) {
$nom = 'ldap_' . $champ;
$val = is_array($v) ? join(',', $v) : strval($v);
$champs[$nom]= array(
'label' => _T('ldap_correspondance', array('champ' => "<tt>$champ</tt>")).'<br />',
'valeur' => $val
);
}
return !$champs ? '' : fieldset(_T('ldap_correspondance_1'), $champs, '', _T('ldap_correspondance_2') . '<br /><br />');
}
?>
......@@ -12,6 +12,7 @@
if (!defined("_ECRIRE_INC_VERSION")) return;
include_spip('inc/headers');
include_spip('auth/ldap');
// http://doc.spip.org/@install_etape_ldap5_dist
function install_etape_ldap5_dist()
......@@ -21,6 +22,45 @@ function install_etape_ldap5_dist()
ecrire_meta('ldap_statut_import', _request('statut_ldap'));
lire_fichier(_FILE_CONNECT_TMP, $conn);
if ($p = strpos($conn, "'');")) {
ecrire_fichier(_FILE_CONNECT_TMP,
substr($conn, 0, $p+1)
. _FILE_LDAP
. substr($conn, $p+1));
}
$adresse_ldap = _request('adresse_ldap');
$login_ldap = _request('login_ldap');
$pass_ldap = _request('pass_ldap');
$port_ldap = _request('port_ldap');
$tls_ldap = _request('tls_ldap');
$protocole_ldap = _request('protocole_ldap');
$base_ldap = _request('base_ldap');
$base_ldap_text = _request('base_ldap_text');
$conn = "\$GLOBALS['ldap_base'] = \"$base_ldap\";\n"
. "\$GLOBALS['ldap_link'] = @ldap_connect(\"$adresse_ldap\",\"$port_ldap\");\n"
. "@ldap_set_option(\$GLOBALS['ldap_link'],LDAP_OPT_PROTOCOL_VERSION,\"$protocole_ldap\");\n"
. (($tls_ldap != 'oui') ? '' :
"@ldap_start_tls(\$GLOBALS['ldap_link']);\n")
. "@ldap_bind(\$GLOBALS['ldap_link'],\"$login_ldap\",\"$pass_ldap\");\n";
$champs = is_array($GLOBALS['ldap_attributes']) ? $GLOBALS['ldap_attributes'] : array();
$res = '';
foreach ($champs as $champ => $v ) {
$nom = 'ldap_' . $champ;
$val = trim(_request($nom));
if (preg_match('/^\w*$/', $val)) {
if ($val) $val = _q($val);
} else $val = "array(" . _q(preg_split('/\W+/', $val)) . ')';;
if ($val) $res .= "'$champ' => " . $val . ",";
}
$conn .= "\$GLOBALS['ldap_champs'] = array($res);\n";
install_fichier_connexion(_DIR_CONNECT . _FILE_LDAP, $conn);
echo install_debut_html('AUTO', ' onload="document.getElementById(\'suivant\').focus();return false;"');
echo info_etape(_T('info_ldap_ok'), info_progression_etape(5,'etape_ldap','install/'), _T('info_terminer_installation'));
......@@ -33,4 +73,5 @@ function install_etape_ldap5_dist()
echo install_fin_html();
}
?>
......@@ -801,6 +801,9 @@ dans une couleur qui indique leur &eacute;tat&nbsp;:',
'label_taille_ecran' => 'Largeur de l\'ecran',
'label_texte_et_icones_navigation' => 'Menu de navigation',
'label_texte_et_icones_page' => 'Affichage dans la page',
'ldap_correspondance' => 'h&eacute;ritage du champ @champ@',
'ldap_correspondance_1' => 'H&eacute;ritage des champs LDAP',
'ldap_correspondance_2' => 'Pour chacun des champs SPIP suivants, indiquer le nom du champ LDAP correspondant. Laisser vide pour ne pas le remplir, s&eacute;parer par des espaces ou des virgules pour essayer plusieurs champs LDAP.' ,
'lien_ajout_destinataire' => 'Ajouter ce destinataire',
'lien_ajouter_auteur' => 'Ajouter cet auteur',
'lien_ajouter_participant' => 'Ajouter un participant',
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter